超全的并发编程模型总结

据我了解,截至目前(2016):并发编程模型主要有一下三种

一:并行工作者模型

并行工作模型主要是有多个工作者,每个工作者单独完成一个事件。如下图


并行编程模型

委派器将任务分配给Worker,Worker单独完成任务,java 7 中 java.util.concurrent 包中好多工具都是基于此模型实现的。明显存在的存在的问题是工作器之间需要共享资源。

如下图:


资源共享

二:流水线模型

流水线模型类似于工厂里的流水线作业,每个worker只负责一个部件。在实际的计算机系统中往往有多条流水线同时进行。

流水线模型

优点:

1:Worker之间不需要状态共享

2:有一定的顺序,有利于模型的回复

3:符合计算机硬件的特点

目前流行的代表产品有:

Vert.x

AKKA

Node.js

Actor 和Channel

Actor:每个事物都是一个actor,Actor之间可以异步的发送和接受信息。


Channel 模型:每个Worker 只需要知道消息需要发到哪个Channel,每个Worker通过Channel 订阅或者取消订阅消息。


三:函数式并发模型


函数式并发模型利用了函数调用之间的独立性实现并发。

总结:那种编程模型好?

具体取决于业务场景,如果作业之间本身是独立的,不需要太多的资源共享,那么可以方便的使用并行编程模型,否则使用流水线编程模型应该会收到更好的效果。函数式并发编程在大数据平台Spark 中使用非常多,个人感觉函数式并发编程很有前景。

推荐阅读更多精彩内容