Jak ciężkie są wątki Javy w porównaniu z aktorami Scala / Akka?

Właśnie porównywałem wyniki aktorów Scali z wątkami Javy.

Byłem zdumiony widząc różnicę, zauważyłem, że z moim systemem byłem w stanie spawnować maksymalnie ~2000 wątków (na żywo w czasie), ale z tym samym systemem byłem w stanie spawnować ~500,000 aktorów Scali.

Oba programy używały około 81MB pamięci JVM.

Czy możesz wyjaśnić dlaczego java thread jest tak ciężki niż Scala / akka actors? Co jest kluczowym czynnikiem, który sprawił, że Scala-aktor był tak lekki?

Jeśli chcę osiągnąć najlepszą skalowalność, Czy powinienem wybrać serwer www oparty na aktorie zamiast tradycyjnego serwera www/aplikacji opartego na Javie, takiego jak JBoss lub Tomcat?

Dzięki.
Author: Eric Walker, 2013-03-21

2 answers

Aktorzy Scali (w tym odmiana Akka) używają wątków Javy. Nie ma magii: ponad kilka tysięcy wątków działających jednocześnie jest problemem dla większości komputerów stacjonarnych.

Model aktora pozwala na przebudzenie aktorów na żądanie, którzy nie zajmują wątku, chyba że mają pracę do wykonania. Niektóre problemy można skutecznie modelować jako dużo środków nasennych czekających na jakąś pracę, którzy zrobią to stosunkowo szybko, a następnie wrócą do snu. W takim przypadku aktorzy są bardzo wydajny sposób wykorzystania wątków Javy do wykonania pracy, zwłaszcza jeśli masz bibliotekę taką jak Akka, w której wydajność ma wysoki priorytet.

Akka docs dość dobrze wyjaśniają podstawy.

Wszystkie w miarę skalowalne Serwery WWW muszą rozwiązać ten rodzaj problemu w taki czy inny sposób; prawdopodobnie nie powinieneś opierać swojej decyzji o serwerze WWW przede wszystkim na tym, czy aktorzy są używani pod maską, i niezależnie od tego, czego używasz, zawsze możesz dodać aktorów siebie.

 39
Author: Rex Kerr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-21 17:52:54

Akka nie jest odpowiednikiem wątku. To jest bardziej jak Callable, który jest wykonywany na threadpool.

Gdy wiadomość jest wysyłana do aktora, ten aktor jest umieszczany w wątku w celu przetworzenia wiadomości. Po zakończeniu wątek zbiorczy może być użyty do wykonania innych aktorów.

 19
Author: parsifal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-21 17:26:54