我一直在研究 actor 模型(特别是 Scala 中的实现),但我不明白为什么要求消息没有按特定顺序到达。
似乎至少有一些优雅的、基于参与者的并发问题解决方案,如果只有消息按顺序到达(例如生产者-消费者变体、延迟数据库写入、并发安全缓存),这些解决方案就会起作用。
那么为什么actor消息没有按顺序到达呢?是为了允许有效的实现还是为了防止在消息排序时出现的某种死锁?
最佳答案
我的印象是,如果两个线程向一个actor发送消息a
,没有特别保证哪个 Actor 会先收到。但是如果你的代码看起来像
a ! "one"
a ! "two"
然后
a
总是会得到 "one"
之前 "two"
(尽管谁知道其他线程之间可能还有什么其他内容)。因此,我认为消息根本不会按特定顺序到达。来自一个线程内的多条消息(据我从代码或经验来看)将按顺序到达。
关于scala - 为什么 Actor 收到的消息是无序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5751993/