Escribí una simulación de Ring network topology en Scala (source here) (Scala 2.8 RC7) y Clojure (source here) (Clojure 1.1) para una comparación de actores y agentes.¿Cómo se comparan los agentes de Clojure con los actores de Scala?
Mientras que la versión de Scala muestra un tipo de cambio de mensaje casi constante ya que aumento el número de nodos en la red de 100 a 1000000, la versión de Clojure muestra tasas de mensajes que disminuyen con el aumento en el número de nodos. Además, durante una sola ejecución, la tasa de mensajes en la versión de Clojure disminuye a medida que pasa el tiempo.
Tengo curiosidad acerca de cómo los actores de Scala se comparan con los de Clojure's Agents? ¿Los agentes son inherentemente menos concurrentes que los actores o el código está escrito de manera ineficaz (autoboxing?)?
PD: Noté que el uso de memoria en la versión de Scala aumenta mucho con el aumento en el número de nodos (> 500 MB para 1 millón de nodos) mientras que Clojure uno usa mucha menos memoria (~ 100 MB para 1 millones de nodos).
Editar:
Tanto las versiones están ejecutando en el mismo JVM con todos los argumentos de JVM y el actor y parámetros de configuración del Agente establecidas por defecto. En mi máquina, la versión de Scala da una velocidad de mensaje de alrededor de 5000 mensajes por segundo para 100 a 1 millón de nodos, mientras que la versión Clojure comienza con 60000 mensajes por segundo para 100 nodos, que disminuye a 200 mensajes por segundo para 1 millón de nodos.
Editar 2
Resulta que mi versión Clojure fue escrito de manera ineficiente. Cambié el tipo de colección nodes
de list
a vector
y ahora muestra un comportamiento consistente: 100000 mensajes/seg para 100 nodos y 80000 mensajes/seg para 100000 nodos. Así que los agentes de Clojure parecen ser más rápidos que los actores de Scala. También actualicé las fuentes vinculadas.
Hay una manera de hacer que un actor de Scala "sin rosca". No sé mucho sobre Clojure, pero estaría bien si publicaras (partes relevantes de) tu código fuente. –
Se vinculó a la fuente de ambas versiones. – Magnus
En su 'Editar 2', ¿usted probablemente quiere decir 'ineficazmente'? – ponzao