阅读有关使用后react
我想在 Scala 的演员中react
假设没有多个线程,则将共享同一个线程react
待定。事实似乎并非如此。
import scala.actors.Actor
import scala.actors.Actor._
class SleepyReactor extends Actor {
def act() {
loop {
react {
case x => {
println("reacting to %s on thread %s".format(x, Thread.currentThread.getName))
Thread.sleep(1000)
println("done with " + x)
}
}
}
}
}
val sleepyOne = new SleepyReactor
sleepyOne.start
sleepyOne ! "first" // runs on thread-5
// wait until completion
sleepyOne ! "second" // runs on thread-3
有人可以解释为什么这些react
正在不同的线程上运行,并且当为演员创建新线程时react
?
我在某处读过react
是基于事件的,我认为这意味着“反应演员”共享一个线程,如果一个正在“反应”,其他“反应演员”将排队直到第一个完成。我现在认为我错了。这是如何工作的,它与接收有何不同?
确实,对于纯粹的基于事件的参与者,其反应代码与消息发送代码在同一线程上运行。
但是在Scala中,由于当actor在其react代码中调用阻塞操作时不希望阻塞线程,并且为了统一基于事件和基于线程的actor(能够组合它们),因此两种类型的actor都使用相同的线程但是基于线程的参与者获得自己的线程,而基于事件的参与者基于任务队列共享线程。详情请参阅统一线程和事件的参与者 http://lamp.epfl.ch/~phaller/doc/haller07actorsunify.pdf作者:菲利普·哈勒和马丁·奥德斯基
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)