scala - 为什么 Actor 收到的消息是无序的?

标签 scala concurrency actor

我一直在研究 actor 模型(特别是 Scala 中的实现),但我不明白为什么要求消息没有按特定顺序到达。

似乎至少有一些优雅的、基于参与者的并发问题解决方案,如果只有消息按顺序到达(例如生产者-消费者变体、延迟数据库写入、并发安全缓存),这些解决方案就会起作用。

那么为什么actor消息没有按顺序到达呢?是为了允许有效的实现还是为了防止在消息排序时出现的某种死锁?

最佳答案

我的印象是,如果两个线程向一个actor发送消息a ,没有特别保证哪个 Actor 会先收到。但是如果你的代码看起来像

a ! "one"
a ! "two"

然后 a总是会得到 "one"之前 "two" (尽管谁知道其他线程之间可能还有什么其他内容)。

因此,我认为消息根本不会按特定顺序到达。来自一个线程内的多条消息(据我从代码或经验来看)将按顺序到达。

关于scala - 为什么 Actor 收到的消息是无序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5751993/

相关文章:

java - 捕获所有子组

scala - 如何通过在 Scala 中从 Double 舍入来创建 BigInt

java - 检查ThreadPoolExecutor中的任务是否全部完成

akka - 在 Akka 中等待多个结果

java - Maven项目中的Scala jar : Failure to find org. mongodb :casbah_2. 12 :jar:3. 1.1

scala - 使用流的内容更改源中的具体化值

java - 在指定的超时后从一个线程执行多个 Runnable

java - "Refreshing"用于 ExecutorService 时固定大小的线程池

scala - 如何从标准输入获取 Actor 信息?

Scala Actors 而不是 Java Futures