据我了解,截至目前(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 中使用非常多,个人感觉函数式并发编程很有前景。
网友评论