在一个进程中,akka和ThreadPool + BlockingQueue之间的本质区别是什么?

时间:2018-10-29 05:23:42

标签: scala design-patterns akka actor producer-consumer

我们知道Akka是actor模式的一种实现。没有Akka,我通常使用ThreadPool + BlockingQueue实现一个简单的actor模式。因此,将消息提供到队列中,然后作品(演员)从队列中获取消息,然后执行应做的事情。当然,这种实现只能在一个过程中完成。

关于一个过程,

  1. 两者之间的本质区别是什么(阿卡vs. ThreadPool + BlockingQueue)
  2. 此外,参与者模式和生产者-消费者模型之间有什么区别?

1 个答案:

答案 0 :(得分:2)

演员模型确实与生产者-消费者模型(P-C)非常相似。

但是,如果您将阻塞队列与P-C一起使用,则您的应用程序将不会完全非阻塞和异步。 actor模型和Akka的承诺是所有消息都是异步发送的,并且不会阻止发件人。

另一方面,一旦有许多消费者和生产者,管理这些队列就会变得很麻烦。通过演员,您只需发送一条消息,而不必考虑这些低级的细节。在后台,Akka将为每个角色保留一个消息队列(又名邮箱),并通过一个调度程序将角色分配给线程池以处理这些消息。

使用Akka来实现高性能和弹性应用程序要比自己编写代码容易得多。您可以立即获得容错,资源管理,位置透明性,路由,分布式,异步处理,分层监督。更不用说利用这些功能来提供更多功能的其他框架和库了(反应流,akk http等)。那里已经为您开发了许多模式,那么为什么还要打扰您自己。