دوره زبان تخصصی برای برنامه‌نویسان (هدیه ویژه ثبت‌نام در دوره‌های متخصص) (فرصت محدود ⏰)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ محسن خسروی
دیتاهایی که safe نیستند
جامعه گولنگ ایجاد شده در ۲۷ تیر ۱۴۰۳

بابت این جلسه، بسیار عالی بود. یکی از برگترین مشکلات من اینجا بررسی شد. بحث همزمانی و آپدیت دیتاهای رفرنس . 

ممنون می‌شم دیتاهایی که در این زمینه safe نیستند رو بیان کنید. تا اینجا فقط به map اشاره شد، در صورتیکه slice هم رفرنس هست. و مهمترین بحث، به جز گوروتین ها، بعنوان مثال، یک API داریم که در ثانیه چندین درخواست رو پاسخ می‌ده، اگر فرض بر این باشه ، دو درخواست همزمان ارسال بشه، این مشکل برای بروزرسانی این جور دیتاها، باز ایجاد می‌شه یا اینکه هر درخواست در یک بلاک جداگانه پردازش می‌شه و تاثیری روی دیتاهای هم ندارند؟! 

سلام،

لیستی از دیتاهایی که در Go واسه همزمانی safe نیستن این‌ها هستن:

Maps - Slices - 

Channels (در صورت استفاده نادرست) - Pointers به دیتاهای مشترک - Structs و انواع داده‌های سفارشی (در صورت دسترسی همزمان بدون استفاده از روش‌های ایمن) - Global Variables
و برای مدیریت همزمانی از روش‌های زیر استفاده میشود:

Mutexes (sync.Mutex) - RWMutexes (sync.RWMutex) - Channels - Atomic Operations (sync/atomic) - Sync.Map

محسن موحد ۲۸ تیر ۱۴۰۳، ۱۲:۴۹