Я пробував свої руки на Akka (Java api). Я спробував порівняти модель одночасності на основі актора Акки з моделлю звичайної Java паралельної валюти (класи Java).
Випадок використання був простою канонічною картою, яка зменшила кількість символів. Набір даних являв собою сукупність випадково згенерованих рядків (довжиною 400 символів) та обчислення кількості голосних в них.
Для Akka я використовував BalancedDispatcher (для врівноваження навантаження між потоками) та RoundRobinRouter (щоб утримувати ліміт для моїх дійових осіб). Для Java я використовував просту техніку приєднання до вилки (реалізовану без будь-якого алгоритму крадіжки роботи), яка б розщеплювала / скорочувала виконання та приєднувалась до результатів. Проміжні результати були проведені в блокуванні черг, щоб зробити з'єднання максимально паралельним. Можливо, якщо я не помиляюся, це якось імітувало б концепцію "поштової скриньки" акторів Акки, де вони отримують повідомлення.
Спостереження: До середніх навантажень (~ 50000 рядок введення) результати були порівнянними, дещо відрізняючись в різних ітераціях. Однак, коли я збільшив навантаження до ~ 100000, це рішення повинно вивісити Java. Я налаштував рішення Java на 20-30 потоків за цієї умови, і це не вдалося у всіх ітераціях.
Збільшення навантаження до 1000000, також було фатальним для Akka. Я можу поділитися кодом з усіма зацікавленими, щоб пройти перехресну перевірку.
Тож для мене, здається, Акка виходить краще, ніж традиційні багатопотокові рішення Java. І, мабуть, причина - магія Скали під капотом.
Якщо я можу моделювати проблемний домен як повідомлення, що керується подією, передаючи повідомлення, я вважаю, що Акка - це хороший вибір для JVM.
Тест виконується на версії Java: 1.6 IDE: Eclipse 3.7 32-бітний Windows Vista. 3 Гб оперативної пам’яті. Процесор Intel Core i5, тактова частота 2,5 ГГц
Зауважте, проблемний домен, використаний для тесту, може бути обговорений, і я намагався бути настільки ж справедливим, наскільки дозволяють мої знання Java :-)