与Scala/Akka演员相比,Java线程如何沉重?

Sma*_*ion 48 java performance multithreading scala akka

我只是比较了scala actor和java线程的性能.

我惊讶地看到了差异,我观察到,通过我的系统,我能够产生最多~2000个线程(一次只能生存)但是使用相同的系统我能够产生~50万个scala的演员.

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

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

如果我想实现最佳的可扩展性,我应该选择基于actor的Web服务器而不是基于Java的传统Web/app服务器,如JBoss或Tomcat?

谢谢.

Rex*_*err 39

Scala actor(包括Akka种类)使用Java线程.毫无魔力:对于大多数台式机而言,同时运行的几千个线程是一个问题.

Actor模型允许按需唤醒的actor,除非他们有工作要做,否则不占用线程.一些问题可以有效地建模,因为许多睡眠代理等待工作,谁会相对快速地做,然后再回去睡觉.在这种情况下,actor是一种使用Java线程来完成工作的非常有效的方法,特别是如果你有像Akka这样的库,其中性能是高优先级.

阿卡文档解释了基本相当不错.

所有合理可扩展的Web服务器都必须以这种或那种方式解决这类问题; 你可能不应该根据网络服务器的决定来决定是否在幕后使用演员,无论你使用什么,你都可以自己添加演员.

  • @Suma - 我认为你不理解我的第二段. (2认同)

par*_*fal 18

Akka演员不等同于一个帖子.它更像Callable是在线程池上执行的.

将消息分派给actor时,该actor将放置在线程池上以处理该消息.完成后,池化线程可用于执行其他actor.