Czy są jakieś opublikowane mikro-benchmarki, które porównują ze sobą zmienne i niezmienne kolekcje Scali ze zbiorami w java.util.concurrent
, w środowiskach wielowątkowych ? Szczególnie interesują mnie przypadki, w których czytelnicy znacznie przewyższają pisarzy, takich jak buforowanie HashMaps w kodzie po stronie serwera.Micro-benchmark porównujący zmienne, niezmienne kolekcje Scala z java.util.concurrent. * Kolekcje
Mikro-poziomy odniesienia kolekcji Clojure również byłyby dopuszczalne, ponieważ ich algorytmy są podobne do tych używanych w trwałych kolekcjach Scala 2.8.
Będę pisać własne, jeśli już nie zostało to zrobione, ale pisanie dobrych mikro-benchmarków nie jest banalne.
Sądzę, że jest bardzo mało prawdopodobne, że uzyskasz rozsądny poziom odniesienia, który porównuje zbiory zmienne i niezmienne, ponieważ sam projekt aplikacji jest inny. –
@Daniel: Obecnie mamy trochę kodu serwera Java, który zawiera HashMaps, które są czytane około 1 000 000 razy przy każdym zapisie. Kod używa 'zsynchronizowanego', ale czytelnicy płacą karę za wszystkie te sprzeczne odczyty, mimo że dane są niezmienne. Pomyślałem, że będę mógł używać trwałych kolekcji z funkcjonalnosci i blokady tylko wtedy, gdy wymienię starą kolekcję na nową "skopiowaną" kolekcję zawierającą nowy przedmiot. – Ralph
Wygląda na uzasadnione oczekiwanie i ilustruje problem z testami porównawczymi. Jeśli testujesz tego rodzaju ładunek, promujesz niezmienność. Ale pamiętaj, że używając niezmiennych map, musisz zawsze aktualizować mapę, co oznacza, że musisz jakoś serializować wszystkie aktualizacje. Sama mapa może być wskazywana przez zmienną, jeśli nie masz nic przeciwko temu, co czyta pozostające w tyle. –