sync.Pool
- Go kursu
- Orta seviye
- Ders 23/80
- 4 dk
Pool ile nesne geri dönüşümünü öğrenirsin.
sync.Pool
sync.Pool, geçici nesneleri geri dönüştürerek çöp toplayıcı (GC) baskısını azaltır. Get() ile havuzdan nesne alır, Put() ile geri koyar. Nesne yoksa New ile yeni oluşturur.
Pool, kısa ömürlü ve yeniden kullanılabilir nesneler (ör. buffer, byte slice) için idealdir. Fakat Pool GC sırasında temizlenir; saklama garantisi yoktur. Bu yüzden state taşımak için uygun değildir.
Pool ve yeniden kullanım
Pool, buffer veya geçici slice'ları geri dönüştürür. var pool = sync.Pool{New: func() interface{} { return &bytes.Buffer{} }} tanımı ile yeni buffer oluşturur. pool.Get().(*bytes.Buffer) ile alır, pool.Put(buf) ile koyar.
Pool'dan alınan nesne her zaman boş olmayabilir; kullanmadan önce sıfırlamak gerekir (ör. buf.Reset()). Bu, kalıntı verinin sorun yaratmasını önler.
Uygulama Pool ile yazdır
main içine bir sync.Pool tanımı ve fmt.Println ile pool tamam yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"sync"
)
func main() {
var pool sync.Pool
pool.New = func() interface{} { return "x" }
v := pool.Get()
fmt.Println("pool tamam")
_ = v
}Beklenen çıktı
pool tamam
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 sync.Pool neyi azaltır?
- Ağ gecikmesi
- Bellek sızıntısı
- CPU kullanımı
- GC baskısı Doğru cevap
Açıklama: Bellek sızıntısı Pool ile doğrudan ilgili değildir.
2 Pool kullanımı
var pool = sync.Pool{
New: func() interface{} { return &Buffer{} },
}
buf := pool.____().(*Buffer)
// use buf
pool.Put(buf)
var pool = sync.Pool{
New: func() interface{} { return &Buffer{} },
}
buf := pool.Get().(*Buffer)
// use buf
pool.Put(buf)
Açıklama: New oluşturucudur, Get alıcıdır.
3 Pool kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
Get |
Al |
Put |
Koy |
New |
Oluştur |
sync.Pool |
Tip |