Gopher Academy
🎯تجزیه و تحلیل قفل ها یا lock ها در mutex ها🎯 🔰 توی این قسمت می خواهیم به قول معروف دل و جیگر این رویکرد رو بریزیم ببینیم چجوری عمل می کند. 📍سرفصلش📍 1 Introduction 2. Mutex data structure 2.1 Mutex structure 2.2 Mutex method 3. Add and unlock process 3.1…
📍1 Introduction Mutex📍
در واقع Mutex روش اصلی برای کنترل دسترسی به منابع اشتراکی در برنامه های همزمان است.
زبان Go یک Mutex بسیار ساده و کاربردی را ارائه می دهد.
که این Mutex نوعی ساختار است که به ترتیب دو روش Lock () و Unlock () را در معرض دید شما قرار می دهد. برای قفل کردن و باز کردن قفل استفاده می شود.
درواقعه Mutex برای استفاده بسیار راحت است ، اما اجرای داخلی آن بسیار پیچیده تر است . که ما در ادامه خواهیم توضیح داد این اجزا و نحوه کارکردشون رو
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
در واقع Mutex روش اصلی برای کنترل دسترسی به منابع اشتراکی در برنامه های همزمان است.
زبان Go یک Mutex بسیار ساده و کاربردی را ارائه می دهد.
که این Mutex نوعی ساختار است که به ترتیب دو روش Lock () و Unlock () را در معرض دید شما قرار می دهد. برای قفل کردن و باز کردن قفل استفاده می شود.
درواقعه Mutex برای استفاده بسیار راحت است ، اما اجرای داخلی آن بسیار پیچیده تر است . که ما در ادامه خواهیم توضیح داد این اجزا و نحوه کارکردشون رو
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🎯تجزیه و تحلیل قفل ها یا lock ها در mutex ها🎯 🔰 توی این قسمت می خواهیم به قول معروف دل و جیگر این رویکرد رو بریزیم ببینیم چجوری عمل می کند. 📍سرفصلش📍 1 Introduction 2. Mutex data structure 2.1 Mutex structure 2.2 Mutex method 3. Add and unlock process 3.1…
📍2. Mutex data structure📍
📍2.1 Mutex structure📍
نمونه کد struct زیر یک نمونه از نحوه قفل کردن روی منابع می باشد
type Mutex struct {
state int32
sema uint32
}
برای دسترسی به این قسمت از کد به مسیر زیر برید
src/sync/mutex.go
خوب بریم ببینیم این ساختار در واقع چه بلایی رو منابع ما میاره 😁
❇️گزینه اول state به معنی قفل بودن یا نبودن رو مشخص می کنه
❇️گزینه دوم نماینگر semaphore ها هستن این semaphore ها در واقع یک نوع داده متغیر یا انتزاعی است که برای کنترل دسترسی به یک منبع مشترک توسط چندین فرآیند در یک سیستم همزمان مانند یک سیستم عامل چند وظیفه ای استفاده می شود. که توسظ Coroutines ها مدیریت می شود این Coroutines ها در واقعه وظیفه اجرا یا از سرگیری مولفه های سیستم می باشند
❌در واقع Mutex.state یک بلوک ۳۲ بیت هست که شامل چهار قسمت هست در شکل زیر توضیح میدیم👇👇
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
📍2.1 Mutex structure📍
نمونه کد struct زیر یک نمونه از نحوه قفل کردن روی منابع می باشد
type Mutex struct {
state int32
sema uint32
}
برای دسترسی به این قسمت از کد به مسیر زیر برید
src/sync/mutex.go
خوب بریم ببینیم این ساختار در واقع چه بلایی رو منابع ما میاره 😁
❇️گزینه اول state به معنی قفل بودن یا نبودن رو مشخص می کنه
❇️گزینه دوم نماینگر semaphore ها هستن این semaphore ها در واقع یک نوع داده متغیر یا انتزاعی است که برای کنترل دسترسی به یک منبع مشترک توسط چندین فرآیند در یک سیستم همزمان مانند یک سیستم عامل چند وظیفه ای استفاده می شود. که توسظ Coroutines ها مدیریت می شود این Coroutines ها در واقعه وظیفه اجرا یا از سرگیری مولفه های سیستم می باشند
❌در واقع Mutex.state یک بلوک ۳۲ بیت هست که شامل چهار قسمت هست در شکل زیر توضیح میدیم👇👇
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
📍توضیحات شکل بالا📍
❇️Locked
نشان دهنده ففل بودن رو نشون میده اگر صفر بود یعنی قفل نیست اگر یک بود بعنی قفل هست
❇️Woken
سازوکار coroutine هاست یعنی اگر صفر بود هیج coroutine از خواب بیدار نشده و اگر یک بود یعنی coroutine مدنظر از خواب بیدار شده و در مرحله قفل شده هست
❇️Starving
نشان می دهد که آیا Mutex حالت گرسنگی را پردازش می کند. اگر صفر بود در حالت گرسنگی نیست و اگر یک بود بعنی اون coroutine بیش از یک میلی ثانبه قفل شده هست
❇️Waiter
تعداد coroutine های مسدود شده رو نشون میده و هتگامی که این coroutine ها از حالت قفل بیرون بیان میشه از اون semaphore ها استفاده کرد
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❇️Locked
نشان دهنده ففل بودن رو نشون میده اگر صفر بود یعنی قفل نیست اگر یک بود بعنی قفل هست
❇️Woken
سازوکار coroutine هاست یعنی اگر صفر بود هیج coroutine از خواب بیدار نشده و اگر یک بود یعنی coroutine مدنظر از خواب بیدار شده و در مرحله قفل شده هست
❇️Starving
نشان می دهد که آیا Mutex حالت گرسنگی را پردازش می کند. اگر صفر بود در حالت گرسنگی نیست و اگر یک بود بعنی اون coroutine بیش از یک میلی ثانبه قفل شده هست
❇️Waiter
تعداد coroutine های مسدود شده رو نشون میده و هتگامی که این coroutine ها از حالت قفل بیرون بیان میشه از اون semaphore ها استفاده کرد
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
the following syntax error is
Final Results
11%
func f(a, b int) (value int, err error)
41%
func f(a int, b int) (value int, err error) )
32%
func f(a, b int) (value int, error)
16%
func f(a int, b int) (int, int, error)
the following syntax is correct
Final Results
12%
str :='abc' + '123'
84%
str := "abc" + "123"
4%
str : = '123' + "abc"
Gopher Academy
🎯تجزیه و تحلیل قفل ها یا lock ها در mutex ها🎯 🔰 توی این قسمت می خواهیم به قول معروف دل و جیگر این رویکرد رو بریزیم ببینیم چجوری عمل می کند. 📍سرفصلش📍 1 Introduction 2. Mutex data structure 2.1 Mutex structure 2.2 Mutex method 3. Add and unlock process 3.1…
📍2.2 Mutex method📍
🔰درواقع Mutext دو روش را ارائه می دهد:
❇️قفل locked (): روش قفل کردن
❇️باز کردنunlocked (): روش باز کردن
🧐بیایید روند قفل کردن و باز کردن قفل را تحلیل کنیم.
❌قفل کردن را می توان به دو حالت تقسیم کرد:
موفقیت و شکست. یا همون success and failure
در صورت موفقیت ، قفل مستقیماً به دست می آید. اما در شرابط پس از خرابی ، coroutine فعلی مسدود می شود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔰درواقع Mutext دو روش را ارائه می دهد:
❇️قفل locked (): روش قفل کردن
❇️باز کردنunlocked (): روش باز کردن
🧐بیایید روند قفل کردن و باز کردن قفل را تحلیل کنیم.
❌قفل کردن را می توان به دو حالت تقسیم کرد:
موفقیت و شکست. یا همون success and failure
در صورت موفقیت ، قفل مستقیماً به دست می آید. اما در شرابط پس از خرابی ، coroutine فعلی مسدود می شود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
📍3.1 Simple lock📍 👇توضیحات 👇 ➖➖➖➖➖➖➖➖➖ 🔰 @gopher_academy
🔰 در شکل فوق با فرض اینکه در حال حاضر فقط یک کوروتین قفل شده است و هیچ دخالتی از سایر کورینتین ها وجود ندارد
فرآیند قفل تعیین می کند که آیا Locked 0 است اگر 0 باشد ، بیت Locked روی 1 تنظیم می شود ، به این معنی که قفل موفقیت آمیز است. از شکل بالا مشخص می شود که پس از قفل کردن فقط موقعیت Locked 1 است و سایر بیت های وضعیت تغییر نکرده اند.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
فرآیند قفل تعیین می کند که آیا Locked 0 است اگر 0 باشد ، بیت Locked روی 1 تنظیم می شود ، به این معنی که قفل موفقیت آمیز است. از شکل بالا مشخص می شود که پس از قفل کردن فقط موقعیت Locked 1 است و سایر بیت های وضعیت تغییر نکرده اند.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
https://www.youtube.com/watch?v=NCUyV9kMAvU
❌مهاجرت کاری برنامه نویسان | بکاند - golang❌
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌مهاجرت کاری برنامه نویسان | بکاند - golang❌
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
YouTube
مهاجرت کاری برنامه نویسان | بکاند - golang
دراین ویدیو من، احسان، به همراه فرود درباره چگونگی فرایند مهاجرت کاری برای برنامهنویسان و همچنین نکات مهم پیشنیاز قبل از مصاحبه و خود مصاحبه صحبت میکنیم. تمرکزمون در این قسمت روی بکاند و زبان گولنگ هست.
📍 ورزن جدید📍
💎go1.15.2 (released 2020/09/09)
🔺includes fixes to the
🔺compiler
🔺runtime
🔺documentation
🔺the go command
🔺net/mail
🔺os
🔺sync
🔺testing packages
👇👇اطلاعات و سایر جزییات این تغییرات👇👇
https://github.com/golang/go/issues?q=milestone%3AGo1.15.2+label%3ACherryPickApproved
🔰 @gopher_academy
💎go1.15.2 (released 2020/09/09)
🔺includes fixes to the
🔺compiler
🔺runtime
🔺documentation
🔺the go command
🔺net/mail
🔺os
🔺sync
🔺testing packages
👇👇اطلاعات و سایر جزییات این تغییرات👇👇
https://github.com/golang/go/issues?q=milestone%3AGo1.15.2+label%3ACherryPickApproved
🔰 @gopher_academy
GitHub
Issues · golang/go
The Go programming language. Contribute to golang/go development by creating an account on GitHub.
📍A summary of the changes between Go releases. Notes for the major releases:📍🧐😁
🔺Go 1.15 (August 2020)
🔺Go 1.14 (February 2020)
🔺Go 1.13 (September 2019)
🔺Go 1.12 (February 2019)
🔺Go 1.11 (August 2018)
🔺Go 1.10 (February 2018)
🔺Go 1.9 (August 2017)
🔺Go 1.8 (February 2017)
🔺Go 1.7 (August 2016)
🔺Go 1.6 (February 2016)
🔺Go 1.5 (August 2015)
🔺Go 1.4 (December 2014)
🔺Go 1.3 (June 2014)
🔺Go 1.2 (December 2013)
🔺Go 1.1 (May 2013)
🔺Go 1 (March 2012)
🔰 @gopher_academy
🔺Go 1.15 (August 2020)
🔺Go 1.14 (February 2020)
🔺Go 1.13 (September 2019)
🔺Go 1.12 (February 2019)
🔺Go 1.11 (August 2018)
🔺Go 1.10 (February 2018)
🔺Go 1.9 (August 2017)
🔺Go 1.8 (February 2017)
🔺Go 1.7 (August 2016)
🔺Go 1.6 (February 2016)
🔺Go 1.5 (August 2015)
🔺Go 1.4 (December 2014)
🔺Go 1.3 (June 2014)
🔺Go 1.2 (December 2013)
🔺Go 1.1 (May 2013)
🔺Go 1 (March 2012)
🔰 @gopher_academy
🔸استخدام Go Developer در شرکت اندیشه فرتاک امیرکبیر #تهران
🔹حقوق تا ۴ میلیون تومان
🔗 https://quera.ir/r/tcYacr
➖➖➖➖➖➖➖➖➖
🔺شرح شغل و وظایف
ارائه راه حلهای مناسب برای ساختار سیستم، پایگاههای داده و ذخیره سازی اطلاعات
ارائه راه کارهای خلاقانه و بهینه برای تست
کد نویسی تمیز
بررسی و دیباگ سیستم برای یافتن مشکلات احتمالی
همکاری با توسعه دهنده FrontEnd برای استفاده از APIها
🔺مهارتهای ضروری:
تسلط بر GoLang
آشنایی با MongoDB
آشنایی با PostgreSQL
آشنایی با REST API
آشنایی با Git
🔰 @gopher_academy
🔹حقوق تا ۴ میلیون تومان
🔗 https://quera.ir/r/tcYacr
➖➖➖➖➖➖➖➖➖
🔺شرح شغل و وظایف
ارائه راه حلهای مناسب برای ساختار سیستم، پایگاههای داده و ذخیره سازی اطلاعات
ارائه راه کارهای خلاقانه و بهینه برای تست
کد نویسی تمیز
بررسی و دیباگ سیستم برای یافتن مشکلات احتمالی
همکاری با توسعه دهنده FrontEnd برای استفاده از APIها
🔺مهارتهای ضروری:
تسلط بر GoLang
آشنایی با MongoDB
آشنایی با PostgreSQL
آشنایی با REST API
آشنایی با Git
🔰 @gopher_academy
🎯در ورژن ۲ از Grpc-Gateway دقت کنید که برای استفاده از 👇
🔺protoc-gen-swagger
در ورژن جدید تغییر نام پیدا کرد به👇
🔺protoc-gen-openapiv2
.
#note
🔰 @gopher_academy
🔺protoc-gen-swagger
در ورژن جدید تغییر نام پیدا کرد به👇
🔺protoc-gen-openapiv2
.
#note
🔰 @gopher_academy