Ho scritto una simulazione dello Ring network topology in Scala (source here) (Scala 2.8 RC7) e Clojure (source here) (Clojure 1.1) per un confronto tra attori e agenti.Come gli agenti di Clojure si confrontano con gli attori di Scala?
Mentre la versione di Scala mostra un tasso di cambio quasi costante mentre aumento il numero di nodi nella rete da 100 a 1000000, la versione Clojure mostra tassi di messaggi che diminuiscono con l'aumento del numero di nodi. Inoltre, durante una singola esecuzione, la velocità dei messaggi nella versione Clojure diminuisce con il passare del tempo.
Quindi sono curioso di sapere come gli attori della Scala si confrontano con gli agenti di Clojure? Gli agenti sono intrinsecamente meno concomitanti degli attori o il codice è scritto in modo inefficiente (autoboxing?)?
PS: ho notato che l'utilizzo della memoria nella versione di Scala aumenta molto con l'aumento del numero di nodi (> 500 MB per 1 milione di nodi) mentre quello di Clojure utilizza molta meno memoria (~ 100 MB per 1 milioni di nodi).
Edit:
Entrambe le versioni sono in esecuzione sulla stessa JVM con tutti i args JVM e attore e parametri di configurazione dell'agente impostati come default. Sulla mia macchina, la versione di Scala dà una velocità di messaggio di circa 5000 messaggi/sec in modo coerente per 100 a 1 milione di nodi, mentre la versione Clojure inizia con 60000 messaggi/sec per 100 nodi che diminuisce a 200 messaggi/sec per 1 milione di nodi.
Edit 2
scopre che la mia versione Clojure è stato inefficiente scritto. Ho cambiato il tipo di collezione nodes
da list
a vector
e ora mostra un comportamento coerente: 100.000 messaggi/sec per 100 nodi e 80000 messaggi/sec per 100000 nodi. Quindi gli agenti Clojure sembrano essere più veloci degli attori alla Scala. Ho aggiornato anche le fonti collegate.
C'è un modo per rendere un attore alla Scala "senza fili". Non so molto di Clojure, ma sarebbe bello se tu pubblicassi (parti rilevanti del tuo codice sorgente). –
È collegato al codice sorgente per entrambe le versioni. – Magnus
In "Modifica 2" probabilmente si intende "inefficiente"? – ponzao