我正在阅读typed actors,而类型化演员提供的界面如下所示:
trait Squarer {
def squareDontCare(i: Int): Unit //fire-forget
def square(i: Int): Future[Int] //non-blocking send-request-reply
def squareNowPlease(i: Int): Option[Int] //blocking send-request-reply
def squareNow(i: Int): Int //blocking send-request-reply
@throws(classOf[Exception]) //declare it or you will get an UndeclaredThrowableException
def squareTry(i: Int): Int //blocking send-request-reply with possible exception
}
这与简单的未来有什么不同?
它们看起来很相似,def square(i: Int): Future[Int]
的界面相同。
是不是类型化的actor是位置透明的(并且可以在其他节点上运行)但是期货不是?
所以打字的演员可以被认为是一种更受限制的期货形式?从某种意义上说,Future构造受到限制,以至于对于未来的构造,不能使用任何不能通过电线(不可序列化)的构造。例如,闭包(或任何函数)不能传递给类型化的actor,但可以用于构造Futures。
答案 0 :(得分:1)
我可以看到以下用例:假设你在actor后面的服务有一个可变状态。由于方法调用是一条消息,而消息是按顺序处理的,因此您可以获得服务内部状态的同步。
BTW actors默认情况下不会将消息限制为可序列化。