تنفيذ سريع للمخازن المؤقتة للتسلسل الموضح في منشور المدونة هذا بواسطة Glenn Fiedler في Go مع تغطية اختبار الوحدة بنسبة 100%.
تم إنشاء هذا بغرض إنشاء بروتوكولات شبكة UDP موثوقة، حيث يمكن استخدام المخازن المؤقتة للتسلسل كمخزن مؤقت فعال ومرن وثابت الحجم من أجل:
تم إصلاح الأرقام التسلسلية المستخدمة لتخزين الإدخالات مؤقتًا لتكون أعدادًا صحيحة 16 بت غير موقعة، نظرًا لأن الكميات الأكبر من الإدخالات تكون زائدة عن الحاجة وستوفر تحسينًا ضئيلًا لنظام إقرار الحزم الخاص بك.
يجب أن يكون حجم المخزن المؤقت قابلاً للقسمة على القيمة القصوى للعدد الصحيح غير الموقع 16 بت (65536)، وإلا فلن تلتف البيانات المخزنة مؤقتًا بواسطة أرقام تسلسلية حول المخزن المؤقت بأكمله. تمت مصادفة ذلك أثناء كتابة الاختبارات لهذه المكتبة.
تم قياس طريقة RemoveRange
وتحسينها من خلال تطبيق المخزن المؤقت التسلسلي في مرجع قاعدة بيانات C codebase Reliable.io لاستخدام عدد قليل من استدعاءات memcpy
عبر الحلقات.
يتم تخزين التسلسلات الفعلية والبيانات المخزنة مؤقتًا في شريحتين منفصلتين ومتجاورتين بحيث تظل الإدخالات التي ظهرت من المخزن المؤقت المتداول كذاكرة قديمة يمكن جمعها بشكل اختياري لاحقًا.
go get github.com/lithdew/seq
$ go test -bench=. -benchtime=10s
goos: linux
goarch: amd64
pkg: github.com/lithdew/seq
BenchmarkTestBufferInsert-8 327525945 35.6 ns/op 0 B/op 0 allocs/op
BenchmarkTestBufferRemoveRange-8 243091503 51.3 ns/op 0 B/op 0 allocs/op
BenchmarkTestBufferGenerateBitset32-8 84982886 137 ns/op 0 B/op 0 allocs/op