打字演员与未来 - 他们有什么不同?

时间:2017-04-30 09:47:22

标签: scala akka future typedactor

我正在阅读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。

1 个答案:

答案 0 :(得分:1)

我可以看到以下用例:假设你在actor后面的服务有一个可变状态。由于方法调用是一条消息,而消息是按顺序处理的,因此您可以获得服务内部状态的同步。

BTW actors默认情况下不会将消息限制为可序列化。