Ana içeriğe geç
Programlama

Go ağ sunucularında eşzamanlılığı goroutine modelleriyle kolaylaştırıyor

Öne çıkanlar

  • Go çalışma zamanı, M:N çizelgeleme ile hafif goroutine yapılarını işletim sistemi iş parçacıklarına eşliyor.
  • Tamponlu kanallar (channel), sunuculardaki eşzamanlı işlem sayısını sınırlamak için semafor olarak kullanılıyor.
  • Yerleşik I/O yönetimi sayesinde soket bekleyen goroutine'ler kullanıcı alanında kaynak tüketmeden bekletiliyor.

Eli Bendersky, eşzamanlı ağ sunucuları serisinin sekizinci bölümünde Go programlama dilinin eşzamanlılık yaklaşımını inceledi. Yazıda, işletim sistemi iş parçacıkları yerine Go çalışma zamanının (runtime) M:N çizelgeleme modeliyle yönettiği hafif goroutine yapılarının ağ programlamadaki rolü ele alındı.

İncelemede istemci başına bir goroutine başlatmanın düşük maliyetli olduğu gösterildi. Bununla birlikte aşırı CPU kullanımı, sınırlı veri tabanı bağlantıları ve kötü niyetli istemcilere karşı eşzamanlılığı sınırlamak için tamponlu kanallarla semafor mekanizması kurulması ve sabit boyutlu işçi havuzu (worker pool) deseninin uygulanması kod örnekleriyle aktarıldı.

Go çalışma zamanının arka planda epoll gibi olay tabanlı I/O döngülerini yerleşik olarak işlettiği belirtildi. Giriş-çıkış bekleyen goroutine'lerin sistem kaynağı tüketmeden uyutulması sayesinde geliştiricilerin harici async/await mimarilerine ihtiyaç duymadan yüksek performanslı eşzamanlı sunucular yazabildiği kaydedildi.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.