1. 程式人生 > >併發程式設計模型總結

併發程式設計模型總結

一:並行工作者模型

並行工作模型主要是有多個工作者,每個工作者單獨完成一個事件。
如下圖
在這裡插入圖片描述

委派器將任務分配給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 中使用非常多,個人感覺函式式併發程式設計很有前景。