Go 1.24 yerleşik harita yapısını Swiss Tables ile yeniledi
Öne çıkanlar
- Go 1.24, harita içi aramalarda 8 kontrol baytını AMD64 üzerinde SIMD talimatlarıyla paralel tarıyor.
- Büyüyen haritalar en fazla 1024 yuvalı tablolara bölünüyor ve yalnızca dolan tablo yeniden yapılandırılıyor.
- Mikro testlerde harita işlemleri yüzde 60 hızlanırken tam uygulamalarda işlemci süresi ortalama yüzde 1,5 iyileşti.
Go ekibi, Go 1.24 sürümüyle birlikte dildeki yerleşik harita (map) veri yapısını Swiss Tables mimarisine geçirdi. Yeni tasarım, eski bağlı kova (bucket) ve taşma kovası zincirlerinin yerine 8 yuvalık gruplardan oluşan bellek düzenini getirdi. Bu yapıda anahtarın özet değeri H1 ve H2 olarak ikiye ayrılıyor; 7 bitlik H2 kısmı kontrol baytlarında saklanırken, eşleşmeler donanım seviyesinde SIMD talimatlarıyla tek seferde taranıyor.
Harita büyüdüğünde sistem en fazla 1024 yuva barındıran tablolar oluşturuyor ve arama sıralaması üçgensel yoklama (triangular probing) yöntemiyle yönetiliyor. Kapasite sınırına ulaşan haritalarda tüm veriyi tek seferde yeniden dağıtmak yerine dizin (directory) yapısı üzerinden genişletilebilir özetleme (extendible hashing) kullanılıyor. Böylece yalnızca alan ihtiyacı duyan tablo ikiye bölünürken diğer tabloların bellekteki yerleşimi korunuyor.
Eski mimarideki işaretçi takibi gerektiren kova zincirlerinin kaldırılması önbellek verimliliğini artırdı. Go ekibinin paylaştığı mikro kıyaslama testlerine göre harita işlemleri Go 1.23 sürümüne kıyasla yüzde 60'a varan oranda hızlandı. Gerçek dünya uygulamalarında ise toplam işlemci süresinde ortalama yüzde 1,5 düzeyinde genel bir iyileşme kaydedildi.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.