Untuk mengimpor BPOOL dari kode sumber penggunaan Go Get Command.
Go Get -u github.com/unit-io/bpool
Gunakan Buffer Pool untuk menulis permintaan yang masuk ke buffer seperti operasi put atau batch atau gunakan Buffer Pool saat menulis data ke file log (selama operasi komit). Tujuan Membuat Perpustakaan BufferPool dengan kapasitas adalah untuk melakukan penulisan awal untuk buffer tanpa backoff sampai Buffer Pool mencapai ukuran targetnya. Buffer Pool tidak membuang permintaan Get atau Write tetapi menambahkan keterlambatan bertahap untuk membatasi penggunaan memori yang dapat digunakan untuk operasi lain penulisan seperti itu untuk log atau operasi sinkronisasi DB.
Dokumentasi API terperinci tersedia menggunakan layanan Godoc.org.
Manfaatkan klien dengan mengimpornya di kode sumber klien GO Anda. Misalnya,
impor "github.com/unit-io/bpool"
Cuplikan kode berikut jika dieksekusi tanpa kapasitas buffer akan mengkonsumsi semua memori sistem dan akan menyebabkan kepanikan.
buf := bytes.NewBuffer(make([]byte, 0, 2))
defer func() {
if r := recover(); r != nil {
fmt.Println("panics from blast")
}
}()
for {
_, err := buf.Write([]byte("create blast"))
if err != nil {
fmt.Println(err.Error())
return
}
}
Kode cuplikan untuk menggunakan bufferpool dengan kapasitas akan membatasi penggunaan memori sistem dengan menambahkan keterlambatan bertahap ke permintaan dan tidak akan menyebabkan kepanikan.
pool := bpool.NewBufferPool(1<<20, &bpool.Options{MaxElapsedTime: 1 * time.Minute, WriteBackOff: true}) // creates BufferPool of 16MB target size
buf := pool.Get()
defer pool.Put(buf)
for {
_, err := buf.Write([]byte("create blast"))
if err != nil {
fmt.Println(err.Error())
return
}
}
Gunakan metode bpool.newbufferpool () dan lulus parameter bufferSize untuk membuat kumpulan buffer baru.
const (
BufferSize = 1<<30 // (1GB size)
)
pool := bpool.NewBufferPool(BufferSize, nil)
Untuk mendapatkan buffer dari buffer pool menggunakan bufferpool.get (). Ketika Buffer Pool mencapai metode GET kapasitasnya berjalan dengan keterlambatan bertahap untuk membatasi penggunaan memori sistem.
....
var buffer *bpool.Buffer
buffer = pool.Get()
Untuk menulis ke metode buffer menggunakan buffer.write ().
var scratch [8]byte
binary.LittleEndian.PutUint64(scratch[0:8], uint64(buffer.Size()))
b.buffer.Write(scratch[:])
....
Untuk membaca metode buffer use buffer.bytes (). Operasi ini mengembalikan irisan data yang digarisbawahi disimpan ke dalam buffer.
data := buffer.Bytes()
...
Untuk meletakkan buffer ke kumpulan saat selesai menggunakan buffer menggunakan metode bufferpool.put (), operasi ini mengatur ulang irisan garis bawah. Ini juga mengatur ulang interval pool buffer yang digunakan untuk menunda operasi GET jika kapasitas di bawah ukuran target.
pool.Put(buffer)
...
Untuk mengatur ulang irisan garis bawah yang disimpan ke buffer dan terus menggunakan metode buffer use buffer.reset () alih -alih menggunakan operasi bufferpool.put ().
buffer.Reset()
....
Jika Anda ingin berkontribusi, silakan bayangkan repositori dan gunakan cabang fitur. Permintaan tarik dipersilakan.
Proyek ini dilisensikan di bawah lisensi MIT.