我刚开始学习使用 Scala 中的 Akka Actors。我的理解是,Actor 接收到的消息会排队在 Actor 的邮箱中,并逐个进行处理。通过逐个处理消息,可以减轻并发问题(竞争条件和死锁)。
但是如果 Actor 创建一个 future 来完成与消息相关联的工作会怎样呢?由于 future 是异步的,当与前一个消息相关联的 future 仍在运行时,Actor 可以开始处理接下来的几个消息。这难道不可能造成竞争条件吗?如何在 Actor 的 receive() 方法内安全地使用 futures 执行长时间运行的任务?
但是如果 Actor 创建一个 future 来完成与消息相关联的工作会怎样呢?由于 future 是异步的,当与前一个消息相关联的 future 仍在运行时,Actor 可以开始处理接下来的几个消息。这难道不可能造成竞争条件吗?如何在 Actor 的 receive() 方法内安全地使用 futures 执行长时间运行的任务?