
Go concurrency distilled: Go-da paralellik haqqında pulsuz mini kitab
Anton Jiyanovun pulsuz «Go concurrency distilled» mini kitabı çıxıb: Go-da paralel proqramlaşdırmanın qısa təkrarı, goroutine və kanallardan context, mutex, atomik əməliyyatlar və istehsalat diaqnostikasına qədər, interaktiv nümunələrlə.
Go-ya həsr olunmuş antonz.org bloqunun müəllifi Anton Jiyanov 26 sentyabrda «Go concurrency distilled» pulsuz mini kitabını dərc edib. Müəllif onu Go-da paralel proqramlaşdırmanın qısa təkrarı kimi təqdim edir, yeni başlayanlar üçün kurs kimi yox: sıfırdan öyrənmək və praktik tapşırıqlar üçün əvvəlki kitabı «Gist of Go: Concurrency» nəzərdə tutulub. Müəllifin sözlərinə görə, yeni kitab AI olmadan yazılıb.
Kitabın tam mətni brauzerdə interaktiv nümunələrlə işləyir: hər parçanın kodunu dəyişib birbaşa səhifədə işə salmaq olar. Statik nümunələrlə PDF versiyası GitHub-da nalgeon/go-conc-distilled repozitoriyasındadır.
goroutine-lərdən pipeline-lara
İlk fəsillər əsasları əhatə edir: go açar sözü ilə başladılan goroutine-lər, onları sinxronlaşdıran wait group-lar və goroutine-lərin bir-birinə dəyər ötürdüyü kanallar: bufersiz və buferli, bağlı və nil variantları. Sonra məlumat axınlarını idarə edən, goroutine-ləri ləğv edən və bloklamayan əməliyyatlar yerinə yetirən select gəlir.
Ayrı bir fəsil pipeline-lara həsr olunub: hər addım bir kanaldan oxuyub digərinə yazır, xətaların idarəsi üçün isə üç yanaşma təqdim edilir: ilk xətada qayıtmaq, cavabı və xətanı bir nəticə tipində birləşdirmək və ya xətaları ayrı kanalda toplamaq.
Vaxt, context və sinxronizasiya
Vaxta ayrı fəsil var: fasilələr üçün time.After, təxirə salınmış işlər üçün timer-lər və dövri tapşırıqlar üçün ticker-lər; dövr daxilində müəllif hər dəfə yeni timer yaratmaq əvəzinə bir timer-i sıfırlamağı məsləhət görür. Əsas vəzifəsi əməliyyatları əl ilə, fasilə və ya son tarixlə ləğv etmək olan context, qat-qat quruluşu ilə birlikdə izah olunur: alt context üst context-in son tarixini yalnız qısaldır, cancel-ın çoxsaylı çağırışları isə təhlükəsizdir. Ləğvin səbəbləri və context.AfterFunc ilə qeydə alınan təmizləmə funksiyaları da təsvir olunub.
Sonra sinxronizasiya primitivləri gəlir: Go-nun yeni metodu ilə wait group-lar, TryLock və RWMutex ilə mutex-lər, semaforlar, signal və broadcast ilə şərt dəyişənləri, sync.Once, zibil toplayıcının yükünü azaltmaq üçün sync.Pool və atomik əməliyyatlar. Müəllif -race bayrağı ilə race detector-ün tutduğu data race ilə tuta bilmədiyi race condition arasındakı fərqi vurğulayır.
Testlər, planlaşdırma və diaqnostika
Testlərdə kitab kodun artıq təqdim etdiyi sinxronizasiya nöqtələrinə arxalanmağı məsləhət görür: kanallar və ya Wait metodu olan tiplər. Onlar yoxdursa, synctest paketi testi saxta saatlı təcrid olunmuş qabarcıqda işlədir, buna görə vaxtdan asılı yoxlamalar dərhal tamamlanır.
Son fəsillər goroutine-ləri əməliyyat sistemi saplarına paylayan planlaşdırıcıya (bir goroutine üçün təxminən 2 KB stek lazımdır) və istehsalat diaqnostikasına həsr olunub: runtime/metrics paketi, CPU, heap, goroutine, block və mutex profilləri olan pprof, go tool trace ilə izləmə və son izi sürüşən pəncərədə saxlayan flight recording.
SiTech — AI ilə gücləndirilmiş veb hazırlanması
Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.