CodeBlanks Logo Icon CodeBlanks

sync.Pool

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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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ı

Soru
var pool = sync.Pool{
    New: func() interface{} { return &Buffer{} },
}
buf := pool.____().(*Buffer)
// use buf
pool.Put(buf)
Cevap
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

Orta seviye bölümündeki tüm dersler