Go Academy · Ders

Yığın ve Öbek ile Kaçış Çözümlemesi

Go'nun belleği nereye ayıracağına nasıl karar verdiği

1. ders / 413 adım

Yığın ve Öbek ile Kaçış Çözümlemesi, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Yığın ayırma

İşlevden kaçmayan yerel değişkenler goroutine yığınında ayrılır. Yığın ayırma hızlıdır (yalnızca bir işaretçi artırılır) ve toplanması maliyetsizdir (dönüşte yığın çerçevesi çıkarılır).

Öbek ayırma

Öbeğe kaçan değişkenler Go ayırıcısıyla ayrılır ve çöp toplayıcı tarafından izlenir. Öbek ayırma daha yavaştır ve çöp toplayıcı üzerindeki baskıyı artırır.

Kaçışa ne neden olur?

Yaygın kaçış nedenleri şunlardır: yerel bir değişkenin adresini almak ve onu döndürmek, yerel bir değeri bir arabirimde saklamak veya kanala göndermek. Derleyicinin kaçış analizi bunu belirler.

func newUser() *User { // *User escapes to heap
    return &User{Name: "Alice"}
}

go build -gcflags=-m

Kaçış analizi kararlarını yazdırın:

go build -gcflags="-m" .
// main.go:10:15: &User literal escapes to heap
// main.go:5:14: s does not escape

Goroutine yığınları

Her goroutine, küçük bir yığınla (Go 1.14 ve sonraki sürümlerde 2 KiB) başlar ve gerektiğinde dinamik olarak büyür. Yığınlar öbekten ayrıdır ve goroutine sona erdiğinde toplanır.

Ayırmalardan kaçınma

Küçük yapılar için işaretçiler yerine değerleri geçirin. Boyut biliniyorsa dilimler yerine yığında ayrılmış diziler kullanın. Değerleri işaretçiler yerine döndürerek yığında tutun.

Arabirim kutulama

Somut bir değeri bir arabirime atamak, değerin öbeğe kaçmasına neden olur (kutulama). Yoğun kullanılan yollarda arabirimler yerine somut türleri kabul edin veya genel türleri kullanın.

sync.Pool

Kısa ömürlü nesnelerin (arabellekler, istek bağlamları) sık sık ayrılmasından kaynaklanan çöp toplayıcı baskısını azaltmak için öbekte ayrılmış nesneleri sync.Pool ile yeniden kullanın.

var pool = sync.Pool{New: func() any { return make([]byte, 1024) }}
buf := pool.Get().([]byte)
defer pool.Put(buf[:0])

Ayırmaların profilini çıkarma

En fazla belleği ayıran işlevleri bulmak için go test -benchmem ve -alloc_space ile öbek profili oluşturmayı kullanın.

Dilim ve dizi karşılaştırması

Küçük bir dizi [N]T yığında kalabilir. Bir dilim başlığı (24 bayt) yığında ayrılır, ancak destekleyen dizisi kaçabilir. make ile önceden ayırma, tekrarlanan yeniden ayırmaları önler.

Dizgilerin ortaklaştırılması

Dizgi sabitleri öbekte ayrılmaz (salt okunur veri bölümünde bulunurlar). []byte değerini dizgiye dönüştürmek ayırma yapar. Tekrarlanan dönüştürmeleri önlemek için sık kullanılan dizgileri önbelleğe alın.

Hızlı Kontrol

Yerel bir değişkenin yığından öbeğe kaçmasına ne neden olur?

Özet: Yığın ve Öbek

Temel noktalar:

  • Yığın: hızlı, çöp toplama maliyeti yok; Öbek: daha yavaş, çöp toplayıcı tarafından izlenir
  • go build -gcflags="-m" kaçış kararlarını gösterir
  • Arabirim kutulama, yerelin adresini alma ve kanal gönderimleri kaçışa neden olur
  • Sık ayrılan ve atılan nesneler için sync.Pool kullanın
Başlamak ücretsiz

Yapay zeka eğitmeniyle Go öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“Yığın ve Öbek ile Kaçış Çözümlemesi” dersi ücretsiz mi?

Evet — “Yığın ve Öbek ile Kaçış Çözümlemesi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Yığın ve Öbek ile Kaçış Çözümlemesi” dersinde ne öğreneceğim?

Go'nun belleği nereye ayıracağına nasıl karar verdiği Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Yığın ve Öbek ile Kaçış Çözümlemesi” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Yığın ve Öbek ile Kaçış Çözümlemesi
  2. Go Bellek Modeli ve Happens-Before
  3. Çöp Toplayıcının İç İşleyişi
  4. Ayırmaları Azaltma: sync.Pool ve Arenalar
← Go Academy Sayfasına Dön