العودة
Go concurrency distilled: كتاب مصغّر مجاني عن التزامن في Go
SiTech AI Team2 წთ. საკითხავი

Go concurrency distilled: كتاب مصغّر مجاني عن التزامن في Go

نشر أنطون جييأنوف كتابًا مصغّرًا مجانيًا بعنوان «Go concurrency distilled»: مراجعة سريعة للبرمجة المتزامنة في Go، من goroutines والقنوات إلى context والأقفال والعمليات الذرّية وتشخيص الإنتاج، مع أمثلة تفاعلية.

نشر أنطون جييأنوف، مؤلف مدونة antonz.org المتخصصة في Go، في 26 سبتمبر كتابًا مصغّرًا مجانيًا بعنوان «Go concurrency distilled». يصفه المؤلف بأنه مراجعة سريعة للبرمجة المتزامنة في Go وليس دورة للمبتدئين: من يريد تعلّم التزامن من الصفر مع تمارين عملية يدله المؤلف على كتابه السابق «Gist of Go: Concurrency». والكتاب الجديد، بحسب المؤلف، كُتب دون استخدام AI.

النص الكامل يعمل في المتصفح مع أمثلة تفاعلية: يمكن تعديل الكود في كل مقطع وتشغيله مباشرة في الصفحة. أما نسخة PDF بالأمثلة الثابتة فهي في مستودع nalgeon/go-conc-distilled على GitHub.

من goroutines إلى pipelines

تغطي الفصول الأولى الأساسيات: goroutines التي تُشغَّل بكلمة go المفتاحية، ومجموعات الانتظار (wait groups) لمزامنتها، والقنوات (channels) التي تتبادل عبرها goroutines القيم، بأنواعها: غير المخزّنة والمخزّنة، والموجّهة، والمغلقة وnil. ثم يأتي select، الذي يدير تدفقات البيانات ويلغي goroutines وينفّذ عمليات غير حاجبة.

وهناك فصل منفصل عن pipelines، حيث يقرأ كل طور من قناة ويكتب في أخرى، وعن معالجة الأخطاء في هذه السلاسل: العودة عند أول خطأ، أو تجميع الجواب والخطأ في نوع نتيجة واحد، أو جمع الأخطاء في قناة منفصلة.

الزمن وcontext والمزامنة

للزمن فصل خاص: time.After للمهلات الزمنية، والمؤقتات (timers) للعمل المؤجَّل، وtickers للمهام الدورية؛ وينصح المؤلف داخل الحلقات بإعادة ضبط مؤقت واحد بدل إنشاء مؤقت جديد في كل تكرار. ويُشرح context، الذي يتمثل دوره الأساسي في إلغاء العمليات يدويًا أو بمهلة أو بموعد نهائي، مع بنيته الطبقية: السياق الابن يمكنه فقط تقصير مهلة السياق الأب، واستدعاء cancel أكثر من مرة آمن. ويغطي الكتاب أيضًا أسباب الإلغاء المخصصة ودوال التنظيف المسجَّلة عبر context.AfterFunc.

ثم تأتي بدائيات المزامنة: wait groups مع طريقة Go الأحدث، وmutexes مع TryLock وRWMutex، وsemaphores، ومتغيرات الشرط مع signal وbroadcast، وsync.Once، وsync.Pool لتخفيف الحمل عن جامع القمامة، والعمليات الذرّية. ويشدّد المؤلف على الفرق بين data race الذي يلتقطه race detector مع العلم -race، وrace condition الذي لا يلتقطه.

الاختبار والجدولة والتشخيص

في الاختبارات ينصح الكتاب بالاعتماد على نقاط المزامنة التي يوفّرها الكود أصلًا: القنوات أو الأنواع ذات طريقة Wait. وعند غيابها يأتي دور حزمة synctest: فهي تُجري الاختبار داخل فقاعة معزولة بساعة مزيفة، لذا تمرّ الفحوص المرتبطة بالزمن فورًا.

وتُخصَّص الفصول الأخيرة للجدّاد (scheduler) الذي يوزّع goroutines على خيوط نظام التشغيل (تحتاج goroutine واحدة نحو 2 كيلوبايت من المكدّس)، وللتشخيص في بيئة الإنتاج: حزمة runtime/metrics، ومحلّل pprof مع ملفات CPU وheap وgoroutine وblock وmutex، والتتبّع عبر go tool trace، وflight recording الذي يحتفظ بأحدث أثر في نافذة منزلقة.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.