2 Şubat 2012 Perşembe

ConcurrentHashMap - Concurrency Level

Merhaba,

Çok thread'li uygulamalarda sıkça kullandığımız java.util.concurrent.ConcurrentHashMap sınıfının concurrencyLevel diye, default değeri 16 olan bir değişkeni mevcut. (Detaylar için bknz: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html)

Yük testi yaparken yoğun olarak kullanılan bir HashMap'te saniye mertebesine uzayan update ve get işlemleri görünce araştırma gereği hissettim. Şayet 1 thread'in yazacağı, diğerlerinin sadece okuyacağı bir map ise bu değerin constructor'da 1 verilmesi tavsiye ediliyor.

Gereğinden büyük bir değer verilmesi zaman kaybına ve gereksiz memory kullanımına yol açıyor. İdeal değerini optimize ederek geliştirilen uygulamaya yönelik olarak seçmek gerekiyor.

Yaptığım testlerde bizim uygulama alanımız için bu değerin 100 olmasına karar verdim. Okuma - yazma sürelerimiz olması gerektiği gibi milisaniye mertebelerine düştü. Hatta tüm akışta yük altında her istek için 2-3 saniye kazancımız olduğunu söyleyebilirim. 

Etkili bir iyileştirme oldu !



Hiç yorum yok:

Yorum Gönder