【问题标题】:what the essential difference between akka and ThreadPool+BlockingQueue in ONE Process?ONE Process中akka和ThreadPool+BlockingQueue的本质区别是什么?
【发布时间】:2018-10-29 05:23:42
【问题描述】:
我们知道 Akka 是参与者模式的一种实现。如果没有 Akka,我通常使用 ThreadPool+BlockingQueue 实现一个简单的 actor 模式。所以消息被提供到队列中,作品(演员)从队列中获取消息,然后做他们应该做的事情。当然,这种实现只能在一个进程中。
为了在一个过程中,
- 这两者之间的本质区别是什么(Akka vs.
线程池+阻塞队列)
- 另外,actor模式和生产者-消费者模式有什么区别?
【问题讨论】:
标签:
scala
design-patterns
akka
actor
producer-consumer
【解决方案1】:
Actor 模型确实与生产者-消费者模型 (P-C) 非常相似。
但是,如果您在 P-C 中使用阻塞队列,您的应用程序将不会是完全非阻塞和异步的。 Actor 模型和 Akka 的承诺是所有消息都是异步发送的,不会阻塞发送者。
另一方面,一旦您拥有许多消费者和生产者,管理这些队列就会变得非常麻烦。使用演员,您只需发送消息,而不必考虑这些低级细节。在底层,Akka 将为每个参与者保留一个消息队列,也就是邮箱,分配器将参与者分配到线程池以处理这些消息。
使用 Akka 实现高性能和弹性的应用程序比自己编写代码要容易得多。您可以获得开箱即用的容错、资源管理、位置透明性、路由、分布式、异步处理、分层监督。更不用说其他利用这些功能为您提供更多功能的框架和库(反应式流、akka http 等)。那里已经为您开发了很多模式,所以为什么还要麻烦您自己的。