Stavo provando le mie mani su Akka (api Java). Quello che ho provato è stato quello di confrontare il modello di concorrenza basato sull'attore di Akka con quello del semplice modello di concorrenza Java (classi java.util.concurrent).
Il caso d'uso era una semplice mappa canonica per ridurre l'implementazione del conteggio dei caratteri. Il set di dati era una raccolta di stringhe generate casualmente (400 caratteri di lunghezza) e calcolava il numero di vocali in esse contenute.
Per Akka ho usato un BalancedDispatcher (per il bilanciamento del carico tra i thread) e RoundRobinRouter (per mantenere un limite sui miei attori). Per Java, ho usato una tecnica di fork fork semplice (implementata senza alcun algoritmo di furto di lavoro) che avrebbe biforcato / ridotto le esecuzioni e unito i risultati. I risultati intermedi sono stati mantenuti nelle code di blocco per rendere anche l'unione il più parallela possibile. Probabilmente, se non sbaglio, ciò imiterebbe in qualche modo il concetto di "cassetta postale" degli attori Akka, in cui ricevono messaggi.
Osservazione: fino a carichi medi (input di ~ 50000 string) i risultati sono stati comparabili, variando leggermente in diverse iterazioni. Tuttavia, aumentando il mio carico a ~ 100000, si bloccherebbe la soluzione Java. Ho configurato la soluzione Java con 20-30 thread in questa condizione e non è riuscita in tutte le iterazioni.
L'aumento del carico a 1000000 è stato fatale anche per Akka. Posso condividere il codice con chiunque sia interessato a un controllo incrociato.
Quindi per me, sembra che Akka si riduca meglio della tradizionale soluzione multithread Java. E probabilmente il motivo è la magia sotto il cofano della Scala.
Se riesco a modellare un dominio problematico come un messaggio guidato da un evento che passa uno, penso che Akka sia una buona scelta per la JVM.
Test eseguito su: Versione Java: 1.6 IDE: Eclipse 3.7 Windows Vista 32 bit. Ram da 3 GB. Processore Intel Core i5, velocità di clock 2,5 GHz
Si noti che il dominio del problema utilizzato per il test può essere discusso e ho cercato di essere onesto quanto le mie conoscenze Java consentivano :-)