首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与Scala / Akka角色相比,Java线程有多重?

与Scala / Akka角色相比,Java线程有多重?
EN

Stack Overflow用户
提问于 2013-03-22 01:09:58
回答 2查看 13.9K关注 0票数 48

我只是比较了scala参与者和java线程的性能。

我惊讶地发现了其中的不同之处,我观察到,使用我的系统,我只能产生最多~2000个线程(一次活动),但使用相同的系统,我可以产生大约500,000个scala参与者。

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

你能解释一下为什么java线程比scala / akka参与者更重吗?scala-actor如此轻量级的关键因素是什么?

如果我想实现最好的可伸缩性,我应该选择基于角色的web服务器,而不是基于java的传统web/应用服务器,如JBoss或Tomcat?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-22 01:27:17

Scala参与者(包括Akka类型)使用Java线程。没有什么神奇之处:超过几千个线程同时运行对于大多数台式机来说都是一个问题。

Actor模型允许按需唤醒Actor,这些Actor不占用线程,除非它们有工作要做。一些问题可以有效地模拟为许多休眠代理等待获得一些工作,这些代理将相对快速地完成工作,然后返回睡眠。在这种情况下,actors是使用Java线程化完成工作的一种非常有效的方法,特别是如果您有一个像Akka这样的库,其中性能一直是一个高优先级的库。

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

所有具有合理伸缩性的web服务器都必须以某种方式来解决这类问题;您可能不应该将您对web服务器的决定主要基于是否在幕后使用角色,并且无论您使用什么,您都可以自己添加角色。

票数 39
EN

Stack Overflow用户

发布于 2013-03-22 01:26:54

Akka角色并不等同于线程。它更像是在线程池上执行的Callable

当消息被调度到执行元时,该执行元被放在线程池中以处理该消息。当它完成时,池化线程可以用来执行其他参与者。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15553857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档