当前位置: 首页 > 知识库问答 >
问题:

与Scala/Akka参与者相比,Java线程的重量如何?

令狐晟
2023-03-14

我刚才比较了scala Actor和java线程的性能。

我很惊讶地看到了这种差异,我观察到我的系统最多只能生成2000个线程(一次活动),但在同一个系统中,我只能生成500,000个Scala参与者。

共有1个答案

孙永嘉
2023-03-14

Scala参与者(包括Akka类型)使用Java线程。这并不是什么神奇的事情:对于大多数台式机来说,超过数千个线程同时运行是一个问题。

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

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

所有可合理伸缩的web服务器都必须以这样或那样的方式解决这类问题;您可能不应该将web服务器的决定主要建立在Actor是否在引擎盖下使用的基础上,并且无论使用什么,您都可以自己添加Actor。

 类似资料:
  • ``` 所以,我的问题是--有没有一种干净的方法来结构和重构路由,而不是将它们集中在一个大的路由定义中?我也许可以创建一个参与者(路由器)的层次结构,主路由定义只是将其委托给路由器,随着我们深入参与者层次结构,我们会逐步添加更多的细节。但是否有一两种普遍接受的模式来组织路线呢?

  • 对于我正在构建的新akka应用程序,我有一个设计挑战。问题/挑战是:在客户端,我制作了一个简单的actor,它发送一个请求,然后使用been()来等待正确的服务器应答,当然还包括一条超时消息,以防我在正确的时间内没有得到应答。然而,有趣的是在服务器端。这里我有以下结构: 参与者A(配置为循环路由器)此路由器正在接收来自客户端的所有请求。 参与者A然后将消息转发给参与者A1、A2。。。Ax都是在演员

  • 我很难弄清楚我如何知道我的演员何时从非演员代码中完成。 尝试使用akka演员进行并行执行,这似乎真的很好,但我需要知道何时所有人都完成了。 我添加了一个监督者演员,产生演员来做工作,从监督者/父演员,我可以观看孩子的终止消息。 我需要从akka actor系统之外的常规java代码中得到帮助,以确定我的监督actor是否完成。 这是否可能,请提供指针。 谢谢哈瑞

  • 我正在尝试使用类型化执行器版本2.6.3和akka http版本10.1.11,而在非类型化执行器中都运行良好,现在我得到了编译错误

  • 我正在尝试在Scala上实现AKKA http和一些Actor。我用Akka创建了一个web应用程序。但我在一个或两个不同的路由上有这个错误/16。(显然是随机的): 服务器无法及时响应您的请求。请稍后再试! 你能给我解释一下为什么和怎么修吗?我对Akka真的是新手。 主类:

  • 一个基于Actor的HttpServer会对同样的问题做出怎样的反应?。是否所有请求都排在委托的参与者前面,以按顺序处理它们并将消息发送给其他参与者?。如果是这样的话,这就是我不明白actor怎么能比线程模型提供更好的性能的一点,因为仅仅1个actor按顺序处理20个请求,并不能比10个线程并发处理20个请求更快。 我想了解的是,当多个请求同时出现时,actor是如何反应的?,而不是actor如何