Gio*_*gio 5 multithreading scala akka
我正在使用运行AMD四核处理器的Ubuntu 12.04系统上试验akka/scala 2.10.3.
我写了一个服务器,它应该在收到请求时执行一些计算.客户端将使用actor消息发送一些数据(字符串列表).当服务器上的actor接收到列表时,它会将其拆分为四个列表,并有四个子actor对列表进行排序.
到目前为止一切顺利:程序正常运行,我可以验证客户端是否收到了正确排序的列表.
但是在服务器的行为中我有两件事我不明白:
编辑
遵循丹西蒙的建议,我已经研究了问题1的使用visualvm.
visualvm报告几个等待大部分时间的调度程序线程(因此它们似乎没有占用太多CPU时间).
visualvm还显示了一些一直在运行的其他线程,即使应用程序没有做任何事情; 至少,我的代码都没有被执行.这些忙碌的线程被命名为New I/O worker #1, #2, #4, #5,New I/O boss #3,New I/O server boss,Signal Dispatcher,RMI TCP Connection(2)-127.0.0.1,Attach Listener,和RMI TCP Accept-0.
我有一些编程akka的经验,但几乎没有配置它的经验,所以我无法理解上述信息.
“他们进入了一种只等待传入消息的状态”
当消息通过回调方法到达时,参与者是否会收到通知,或者参与者本身是否会轮询某个队列以查看是否有新消息?
如果您正在轮询,发现没有工作,然后立即返回再次轮询(本质上是忙于旋转),后者可能会导致 100% cpu 使用率。修复方法是在再次轮询之前等待一段时间(Thread.yield()、LockSupport.parkNanos(1) 等)。
| 归档时间: |
|
| 查看次数: |
1608 次 |
| 最近记录: |