據(jù)我了解,截至目前(2016):并發(fā)編程模型主要有一下三種
一:并行工作者模型
并行工作模型主要是有多個(gè)工作者,每個(gè)工作者單獨(dú)完成一個(gè)事件。如下圖
委派器將任務(wù)分配給Worker,Worker單獨(dú)完成任務(wù)攻晒,java 7 中 java.util.concurrent 包中好多工具都是基于此模型實(shí)現(xiàn)的。明顯存在的存在的問題是工作器之間需要共享資源班挖。
如下圖:
二:流水線模型
流水線模型類似于工廠里的流水線作業(yè)鲁捏,每個(gè)worker只負(fù)責(zé)一個(gè)部件。在實(shí)際的計(jì)算機(jī)系統(tǒng)中往往有多條流水線同時(shí)進(jìn)行萧芙。
優(yōu)點(diǎn):
1:Worker之間不需要狀態(tài)共享
2:有一定的順序给梅,有利于模型的回復(fù)
3:符合計(jì)算機(jī)硬件的特點(diǎn)
目前流行的代表產(chǎn)品有:
Vert.x
AKKA
Node.js
Actor 和Channel
Actor:每個(gè)事物都是一個(gè)actor,Actor之間可以異步的發(fā)送和接受信息双揪。
Channel 模型:每個(gè)Worker 只需要知道消息需要發(fā)到哪個(gè)Channel,每個(gè)Worker通過Channel 訂閱或者取消訂閱消息动羽。
三:函數(shù)式并發(fā)模型
函數(shù)式并發(fā)模型利用了函數(shù)調(diào)用之間的獨(dú)立性實(shí)現(xiàn)并發(fā)。
總結(jié):那種編程模型好渔期?
具體取決于業(yè)務(wù)場(chǎng)景运吓,如果作業(yè)之間本身是獨(dú)立的渴邦,不需要太多的資源共享,那么可以方便的使用并行編程模型拘哨,否則使用流水線編程模型應(yīng)該會(huì)收到更好的效果谋梭。函數(shù)式并發(fā)編程在大數(shù)據(jù)平臺(tái)Spark 中使用非常多,個(gè)人感覺函數(shù)式并發(fā)編程很有前景倦青。