¿Existen microensayos publicados que comparen las colecciones mutables e inmutables de Scala entre sí y las colecciones en java.util.concurrent
, en entornos con múltiples subprocesos ? Estoy particularmente interesado en casos en los que los lectores superan con creces a los escritores, como el almacenamiento en caché de HashMaps en el código del lado del servidor.Micro-punto de referencia que compara las colecciones mutables e inmutables de Scala con las colecciones java.util.concurrent. *
Las micro-referencias de las colecciones de Clojure también serían aceptables, ya que sus algoritmos son similares a los utilizados en las colecciones persistentes de Scala 2.8.
Escribiré las mías si ya no hay ninguna, pero escribir buenos micro-benchmarks no es trivial.
Creo que es muy poco probable que obtenga un punto de referencia razonable que compare colecciones mutables e inmutables, porque el diseño de la aplicación en sí es diferente. –
@Daniel: actualmente tenemos un código de servidor Java que contiene HashMaps que se leen aproximadamente 1,000,000 de veces para cada escritura. El código usa 'sincronizado', pero los lectores pagan una penalización por todas las lecturas contenidas aunque los datos sean efectivos e inmutables. Pensé que podría usar las colecciones persistentes de functionaljava y bloquear solo cuando reemplazara la colección anterior con la nueva colección "copiada" que contiene el nuevo elemento. – Ralph
Parece una expectativa razonable e ilustra el problema con los puntos de referencia. Si prueba ese tipo de carga, está predisponiendo a la inmutabilidad. Pero tenga en cuenta que, al usar mapas inmutables, debe volver a colocar el mapa cada vez que lo actualice, lo que significa que tendrá que serializar todas las actualizaciones de alguna manera. El mapa en sí mismo podría ser señalado por un elemento volátil, si no te importa lee lo que queda detrás de las escrituras. –