Comment sont les threads Java lourd par rapport à la Scala / Akka acteurs?
Je viens de comparer la performance de la scala acteurs vs les threads java.
J'ai été étonné de voir la différence, j'ai observé qu'avec mon système, j'ai pu frayer maximum de ~2000 threads (live à un moment), Mais avec le même système, j'ai pu frayer ~de 500 000 acteurs de la scala.
Les deux programmes utilisés autour de 81MB de mémoire dans la mémoire de la JVM.
Pouvez-vous expliquer Comment le fil de java sont à présent beaucoup de poids lourds que scala /akka acteurs?
Quel est le facteur clé qui a fait scala-acteur de cette quantité de lumière du poids?
Si je veux atteindre une meilleure extensibilité, dois-je aller pour l'acteur serveur web au lieu de java traditionnelle basée sur le web/serveur d'application comme JBoss ou Tomcat?
Grâce.
- Quant à votre serveur web en question, cela dépend de ce que vous avez besoin. Il y a vraiment des solutions évolutives wrt à haut débit, basé sur NIO comme Netty, et qu'ils n'utilisent pas les acteurs. Avez-vous besoin d'une véritable serveur web? haut services de la circulation? D'intégration élevé avec la connaissance de cadres (jee, spring,...)? Les acteurs en général, et Akka 2.1 notamment avec la prise en charge des clusters, ou jouer! qui est basé sur akka, sont un "évolutif" de la solution, trop, mais il n'y a pas de solution miracle pour tous les scénarios. Cela dépend vraiment de vos besoins.
Vous devez vous connecter pour publier un commentaire.
Scala acteurs (y compris la Akka variété) utiliser les threads Java. Il n'y a pas de magie: plus que quelques milliers de threads en cours d'exécution simultanément est un problème pour la plupart des machines de bureau.
L'Acteur modèle permet de réveiller-sur-la demande des acteurs qui n'occupent pas un thread, à moins qu'ils ont du travail à faire. Certains problèmes peuvent être modélisés efficacement que beaucoup de sommeil agents d'attente pour obtenir un peu de travail, qui va le faire assez rapidement, puis aller de nouveau au sommeil. Dans ce cas, les acteurs sont un moyen très efficace d'utiliser Java threads de faire votre travail, surtout si vous avez une bibliothèque comme Akka où la performance a été une grande priorité.
La Akka docs expliquer les principes de base assez bien.
Tous raisonnablement évolutive des serveurs web pour résoudre ce type de problème, d'une façon ou d'une autre; vous avez probablement ne devrait pas baser votre décision pour le serveur web, principalement si les acteurs sont utilisées sous le capot, et indépendamment de ce que vous utilisez, vous pouvez toujours ajouter des acteurs de vous-même.
Un Akka acteur n'est pas équivalent à un fil. C'est plus comme un
Callable
qui est exécuté sur un pool de threads.Lorsqu'un message est envoyé à un acteur, que l'acteur est placé sur un pool de threads pour traiter le message. Quand c'est fait, la mise en commun de fil peut être utilisé pour exécuter d'autres acteurs.