
Go concurrency distilled: Go'da eşzamanlılık için ücretsiz mini kitap
Anton Zhiyanov'un ücretsiz mini kitabı “Go concurrency distilled” yayımlandı: goroutine'lerden channel'lara, context, mutex ve atomik işlemlere kadar Go'da eşzamanlılığın interaktif örneklerle hızlı bir özeti.
Go odaklı antonz.org blogunun yazarı Anton Zhiyanov, 26 Eylül'de ücretsiz mini kitabı “Go concurrency distilled”ı yayımladı. Yazar kitabı, Go'da eşzamanlı programlamaya dair hızlı bir tekrar olarak tanımlıyor, yeni başlayanlar için değil: sıfırdan öğrenmek ve pratik yapmak isteyenler için önceki kitabı “Gist of Go: Concurrency” var. Yazarın ifadesiyle yeni kitap AI kullanılmadan yazıldı.
Kitabın tamamı tarayıcıda etkileşimli örneklerle çalışıyor: her kod parçası düzenlenip sayfada çalıştırılabiliyor. Statik örnekler içeren PDF sürümü GitHub'daki nalgeon/go-conc-distilled deposunda.
Goroutine'lerden pipeline'lara
İlk bölümler temelleri kapsıyor: go anahtar sözcüğüyle başlatılan goroutine'ler, bunları senkronize eden wait group'lar ve goroutine'lerin birbirine değer aktardığı channel'lar; tamponsuz, tamponlu, kapalı ve nil çeşitleriyle birlikte. Ardından veri akışlarını çoklayan, goroutine'leri iptal eden ve bloklamayan işlemler yapan select geliyor.
Ayrı bir bölüm, her adımın bir channel'dan okuyup diğerine yazdığı pipeline'lara ve bu zincirlerde hata yönetimine ayrılmış: ilk hatada dönmek, yanıtı ve hatayı tek bir sonuç tipinde paketlemek ya da hataları ayrı bir channel'da toplamak.
Zaman, context ve senkronizasyon
Zamana ayrı bir bölüm var: zaman aşımları için time.After, ertelenmiş işler için timer'lar ve periyodik görevler için ticker'lar; yazar döngü içinde her seferinde yeni bir timer yaratmak yerine tek bir timer'ı sıfırlamayı öneriyor. Temel görevi işlemleri elle, zaman aşımıyla veya son tarihle iptal etmek olan context, katmanlı yapısıyla birlikte anlatılıyor: alt context üst context'in son tarihini yalnızca kısaltabilir ve cancel'ı birden çok kez çağırmak güvenlidir. Özel iptal nedenleri ve context.AfterFunc ile kaydedilen temizlik fonksiyonları da yer alıyor.
Ardından senkronizasyon primitifleri geliyor: Go'nun yeni metoduyla wait group'lar, TryLock ve RWMutex ile mutex'ler, semaforlar, signal ve broadcast ile koşul değişkenleri, sync.Once, çöp toplayıcının yükünü azaltmak için sync.Pool ve atomik işlemler. Yazar, -race bayrağıyla race detector'ün yakaladığı data race ile yakalayamadığı race condition arasındaki farkı vurguluyor.
Test, zamanlama ve teşhis
Testlerde kitap, kodun zaten sunduğu senkronizasyon noktalarına yaslanmayı öneriyor: channel'lar veya Wait metotlu tipler. Bunlar yoksa synctest paketi testi sahte saatli izole bir baloncukta çalıştırıyor; böylece zamana bağlı kontroller anında tamamlanıyor.
Son bölümler, goroutine'leri işletim sistemi iş parçacıklarına dağıtan zamanlayıcıya (bir goroutine yaklaşık 2 KB yığın ister) ve üretim teşhisine ayrılmış: runtime/metrics paketi, CPU, heap, goroutine, block ve mutex profilleri sunan pprof, go tool trace ile izleme ve son izi kayan bir pencerede tutan flight recording.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.