據我了解,截至目前(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 中使用非常多,個人感覺函數式并發編程很有前景。