( Go 1.8 - Q1 2017 için aşağıya bakın )
Bir sonraki Go 1.5 eşzamanlı Çöp Toplayıcı, söz konusu gc'yi "hızlandırmayı" içerir.
İşte bu makalede sunulan ve Go 1.5 için uygun olabilecek, ancak aynı zamanda Go'daki gc'yi anlamaya yardımcı olacak bir öneri .
Sen devlet görebilirsiniz önce (: STW Stop The Dünyası) 1.5
Go 1.5'ten önce Go, paralel bir dünyayı durdur (STW) toplayıcı kullanıyordu.
STW toplama birçok dezavantaja sahipken, en azından tahmin edilebilir ve kontrol edilebilir yığın büyüme davranışına sahiptir.
( GopherCon 2015 sunumundan fotoğraf " Go GC: Go 1.5'te Gecikme Sorununu Çözme ")
STW toplayıcı için tek ayar düğmesi, koleksiyonlar arasındaki göreceli yığın büyümesi olan "GOGC" idi. Varsayılan ayar olan% 100, önceki koleksiyondan itibaren yığın boyutu canlı yığın boyutunun iki katına çıktığında çöp toplamayı tetikledi:
STW toplayıcısında GC zamanlaması.
Go 1.5, eşzamanlı bir toplayıcı sunar .
Bunun STW toplamaya göre birçok avantajı vardır, ancak yığın büyümesini kontrol etmek daha zordur çünkü uygulama, çöp toplayıcı çalışırken bellek ayırabilir .
( GopherCon 2015 sunumundan fotoğraf " Go GC: Go 1.5'te Gecikme Sorununu Çözme ")
Aynı yığın büyüme sınırını elde etmek için çalışma zamanının çöp toplamaya daha erken başlaması gerekir, ancak ne kadar erken olursa, çoğu tahmin edilemeyen birçok değişkene bağlıdır.
- Toplayıcıyı çok erken başlatırsanız, uygulama çok fazla çöp toplama işlemi gerçekleştirecek ve CPU kaynaklarını boşa harcayacaktır.
- Toplayıcıyı çok geç başlatın ve uygulama istenen maksimum yığın büyümesini aşacaktır.
Eşzamanlılıktan ödün vermeden doğru dengeyi elde etmek, çöp toplayıcının hızını dikkatlice ayarlamayı gerektirir.
GC hızı, iki boyutta optimizasyonu hedefler: yığın büyümesi ve çöp toplayıcı tarafından kullanılan CPU.
GC hızının tasarımı dört bileşenden oluşur:
- bir GC döngüsünün gerektireceği tarama işi miktarı için bir tahmin edici,
- Yığın tahsisi yığın hedefine ulaştığında, mutatörlerin tahmini tarama işi miktarını gerçekleştirmesi için bir mekanizma,
- mutatör CPU bütçesini yetersiz kullandığında arka plan taraması için bir programlayıcı ve
- GC tetikleyicisi için orantılı bir kontrolör.
Tasarım, iki farklı zaman görünümünü dengeler : CPU zamanı ve yığın zamanı .
- CPU zamanı , standart duvar saati zamanı gibidir, ancak
GOMAXPROCS
zamanları daha hızlı geçer .
Yani, GOMAXPROCS
8 ise , her duvarda sekiz CPU saniyesi geçer ve GC her duvar saniyesinde iki saniyelik CPU süresi alır.
CPU zamanlayıcı, CPU süresini yönetir.
- Yığın süresinin geçişi bayt cinsinden ölçülür ve mutatörler tahsis ettikçe ileri doğru hareket eder.
Yığın süresi ile duvar süresi arasındaki ilişki, tahsis oranına bağlıdır ve sürekli değişebilir.
Mutator, yığın süresinin geçişini yönetmeye yardımcı olur ve tahmini tarama çalışmasının, yığın hedef boyutuna ulaştığında tamamlanmasını sağlar.
Son olarak, tetikleyici denetleyici, bu iki zaman görünümünü birbirine bağlayan ve hem yığın zamanı hem de CPU zaman hedefleri için optimize eden bir geri bildirim döngüsü oluşturur.