生产者/消费者模型等同于Actor模型吗?

8

最近我一直在阅读关于并发编程有多么困难,以及带有共享状态的并发编程几乎是不可能的文章。因此像Erlang这样的语言使用Actor模型进行并发处理,并且线程之间没有共享状态。现在在我的并发系统编程时间里,我没有发现并发很难 - 但通常情况下,我可以将几乎任何问题都放入生产者/消费者范例中,并且没有太多(如果有的话)共享状态来实现。虽然这是正确的吗?线程之间的消息队列实际上是共享状态吗?还是生产者/消费者模型的并发编程真的是Actor模型的一个具体示例(这是我的真正问题)。你有什么想法?

1个回答

4
从技术上讲,共享消息代表了整个应用程序的状态,但前提是生产者和消费者本身是无状态的(否则它们只代表消息共享媒介的状态)。生产者/消费者模型并不是演员模型的一个例子,因为每个单独的生产者和消费者都是演员模型的例子。生产者(也可能是消费者,来自相同的共享消息队列或外部来源)执行其任务并输出一些被排队的消息。队列本身可以被视为一个演员,尽管是一个被动的演员,因为它接收/保留消息,并可以分发它们(或只是等待它们被取走)。消费者是演员,因为他们从共享队列中接收/获取消息,并根据这些消息进行工作。
因此,我的答案基本上是,生产者/消费者模型不是演员模型的一个例子,而是在共享环境中工作的演员集合的例子。

演员范式本身是否有任何东西表明您不能拥有多个演员? - Gandalf
在我看来,Actor范式更能代表一个实体,而生产者/消费者范式更能代表一个系统。 - yoozer8
虽然,如果生产者/消费者系统存在于一个更大的环境中,并且可以与更大的系统中的其他实体进行交互,那么你可能可以将其视为Actor。 - yoozer8
1
那是我的最初想法。希望有更多的人能够参与讨论,但看来每个人都太忙于回答“如何在Java中写入文件?”...哈哈 - Gandalf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接