与Scala / Akka演员相比,Java线程怎么样?

我只是比较斯卡拉演员与Java线程的performance。

我惊异地看到了差异,我观察到,在我的系统中,我能够产生最多2000线程(一次只能生活)。但是使用同一个系统,我能够产生大约50万个scala的演员。

这两个程序都使用了大约81MB的JVM堆内存。

你能解释一下java线程是如何比scala / akka actor更重吗? 什么是使scala-actor这么重量轻的关键因素?

如果我想获得最佳的可伸缩性,我应该去基于演员的Web服务器,而不是基于Java的传统的Web /应用服务器,如JBoss或Tomcat?

谢谢。

斯卡拉演员(包括Akka品种)使用Java线程。 没有什么神奇的:同时运行的数千个线程对大多数台式机器来说都是个问题。

Actor模型允许唤醒按需参与者,除非他们有工作要做,否则不会占用线程。 一些问题可以被有效地模拟,因为许多睡眠代理正在等待一些工作,谁将会相对较快地完成工作,然后再回去睡觉。 在这种情况下,演员是使用Java线程来完成工作的一种非常有效的方式,特别是如果您有像Akka这样的性能优先的库。

Akka文档很好地解释了基础知识。

所有合理可扩展的Web服务器都必须以这种或那种方式解决这类问题; 你可能不应该把你的决定放在Web服务器上,主要是演员是否在幕后使用,不pipe你使用什么,你总是可以自己添加演员。

阿卡演员不等同于一个线程。 它更像是一个在线程池上执行的Callable

当一个消息被分派给一个actor时,这个actor被放置在一个线程池中来处理这个消息。 完成后,池线程可以用来执行其他angular色。