لاستيراد Bpool من رمز المصدر ، استخدم GO GET Command.
GO GET -U github.com/unit-io/bpool
استخدم Buffer Pool لكتابة الطلبات الواردة إلى المخزن المؤقت مثل عمليات PUT أو الدُفعات أو استخدام Buffer Pool أثناء كتابة البيانات لتسجيل الملف (أثناء عملية الالتزام). الهدف من إنشاء مكتبة BufferPool ذات السعة هو أداء الكتابة الأولية إلى المخزن المؤقت دون التراجع حتى يصل Buffer Pool إلى حجم المستهدف. لا يتجاهل Buffer Pool أي طلبات الحصول على أو كتابة ، ولكنه يضيف تأخيرًا تدريجيًا للحد من استخدام الذاكرة الذي يمكن استخدامه للعمليات الأخرى مثل هذه الكتابة لتسجيل أو عمليات مزامنة DB.
تتوفر وثائق API التفصيلية باستخدام خدمة godoc.org.
استفد من العميل عن طريق استيراده في رمز مصدر العميل الخاص بك. على سبيل المثال،
استيراد "github.com/unit-io/bpool"
يتبع قصاصة الكود إذا تم تنفيذها بدون سعة عازلة ستستهلك جميع ذاكرة النظام وسيؤدي إلى ذعر.
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
}
}
سوف يقتصر المقتطف على الكود لاستخدام BufferPool مع السعة على استخدام ذاكرة النظام عن طريق إضافة تأخير تدريجي إلى الطلبات ولن يتسبب في حالة من الذعر.
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
}
}
استخدم طريقة bpool.newbufferpool () وتمرير المعلمة المخزنة لإنشاء تجمع عازلة جديد.
const (
BufferSize = 1<<30 // (1GB size)
)
pool := bpool.NewBufferPool(BufferSize, nil)
للحصول على المخزن المؤقت من Buffer Pool ، استخدم bufferpool.get (). عندما تصل Buffer Pool إلى قدرتها ، يمكنك تشغيل الطريقة مع تأخير تدريجي للحد من استخدام ذاكرة النظام.
....
var buffer *bpool.Buffer
buffer = pool.Get()
للكتابة إلى المخزن المؤقت استخدام الأسلوب buffer.write ().
var scratch [8]byte
binary.LittleEndian.PutUint64(scratch[0:8], uint64(buffer.Size()))
b.buffer.Write(scratch[:])
....
لقراءة المخزن المؤقت استخدام الأسلوب buffer.bytes (). هذه العملية تُرجع ضمانات شريحة البيانات المخزنة في المخزن المؤقت.
data := buffer.Bytes()
...
لوضع المخزن المؤقت للمسبح عند الانتهاء من استخدام المخزن المؤقت ، استخدم طريقة bufferpool.put () ، هذه العملية تعيد ضبط الشريحة السطحية. كما أنه يعيد ضبط الفاصل الزمني لمسبح المخزن المؤقت الذي تم استخدامه لتأخير عملية الحصول على العملية إذا كانت السعة أقل من الحجم المستهدف.
pool.Put(buffer)
...
لإعادة تعيين شريحة السطحية المخزنة إلى المخزن المؤقت ومتابعة استخدام طريقة الاستخدام العازلة.
buffer.Reset()
....
إذا كنت ترغب في المساهمة ، فيرجى توتر المستودع واستخدام فرع الميزات. طلبات السحب موضع ترحيب.
هذا المشروع مرخص بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.