Scala Actors:如果react永远不会返回,为什么它需要在循环{}中,为什么不在while(true)工作?

DNA*_*DNA 13 scala actor

刚刚开始使用Scala Actors.在斯卡拉网站说:

通过使用react等待新消息(基于事件的挂件receive)可以避免线程阻塞操作.但是,有一个(通常是很小的)代价:react永远不会回报.

...

请注意,reactwhile循环内使用不起作用!但是,由于循环是常见的,因此以loop函数的形式为其提供特殊的库支持.它可以像这样使用:

loop {
  react {
    case A => ...
    case B => ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我现在感到困惑 - 似乎有一个矛盾:

a)如果react永远不会返回,那么将它置于循环中有什么意义呢?

b)由于loop重复执行一个块,它有什么不同while(true)- 为什么不起作用while,以及它以什么方式"不起作用"?

dre*_*xin 11

这两个功能,loopreact不是纯粹的.loop通过name参数和reactPartialFunction 进行调用,两者都在原始actor上设置变量.这是因为演员没有始终附加线程.只有当消息框中有消息时,它才会变为活动状态.这就是为什么一个while(true)将导致100%的CPU使用和演员没有响应.

  • 如果你只是遵循食谱可能无关紧要,但对于我来说这是解释中的一个主要绊脚石 - 无论某些东西是否返回都不是一个实现细节(如果你试图循环/重复它) - 它绝对是基础!在询问问题之前我快速浏览了一下消息来源,但我会按照你的意见深入挖掘...... (2认同)