1. 程式人生 > 其它 >5種常見的併發模型

5種常見的併發模型

前言
併發在現在已經是十分常見的問題了,由於人類資訊量的增加,很多資訊都需要併發處理,原有的序列處理已經很難滿足現實的需求。
今天我們來講一講5種常見的併發模型

1、Future模型
Future模型是將非同步請求和代理模式結合的產物
舉例:假設我們是一個電商平臺,使用者在網站下單。使用者操作的是客戶端它會向Future服務端傳送資料,服務端會從後臺的資料介面獲取完整的訂單資料,並響應使用者。
我們模擬一下使用者訂單的行為:

A、使用者挑完商品開始下單,這時客戶端向伺服器端傳送請求1。

B、服務端根據客戶端的資訊,向後臺獲取完整的訂單資料。這裡做一個說明,比如使用者客戶端只發送了幾個商品的id和數量,我們的服務端需要從後臺資料庫讀取商家、商品、訂單、庫存等各種資訊,最後拼成完整的一個訂單返回。

C、步驟2會比較耗時,因此服務端直接返回給客戶端一個偽造的資料,比如一個訂單id。

D、客戶端收到訂單id後,開始檢查訂單資訊,比如檢查一下商品數量是否正確。
注意:
這裡如果需要付款的話,就要等到最後訂單資料的返回,也就是真實的資料返回。如果資料沒有返回,就要一直等待,直到返回。

這時候完整的訂單資訊拼接完成了,返回了訂單的完整資料,使用者付款並完成這個訂單。

客戶端傳送一個長時間的請求,服務端不需等待該資料處理完成便立即返回一個偽造的代理資料(相當於商品訂單,不是商品本身),使用者也無需等待,先去執行其他的若干操作後,再去呼叫伺服器已經完成組裝的真實資料。該模型充分利用了等待的時間片段

2、Fork/Join模型


將任務分割成足夠小的小任務,然後讓不同的執行緒來做這些分割出來的小事情,然後完成之後再進行join,將小任務的結果組裝成大任務的結果


3、Actor模型
每個執行緒都是一個Actor,這些Actor不共享任何記憶體,所有的資料都是通過訊息傳遞的方式進行的
一個Actor指的是一個最基本的計算單元。它能接收一個訊息並且基於其執行計算

Actors有郵箱
儘管許多actors同時執行,但是一個actor只能順序地處理訊息。也就是說其它actors傳送了三條訊息給一個actor,這個actor只能一次處理一條。所以如果你要並行處理3條訊息,你需要把這條訊息發給3個actors。
訊息非同步地傳送到actor,所以當actor正在處理訊息時,新來的訊息應該儲存到別的地方。Mailbox就是這些訊息儲存的地方


4、生產者消費者模型
核心是使用一個快取來儲存任務。開啟一個/多個執行緒來生產任務,然後再開啟一個/多個來從快取中取出任務進行處理。
這樣的好處是任務的生成和處理分隔開,生產者不需要處理任務,只負責向生成任務然後儲存到快取。而消費者只需要從快取中取出任務進行處理。使用的時候可以根據任務的生成情況和處理情況開啟不同的執行緒來處理。
生成的任務速度較快,那麼就可以靈活的多開啟幾個消費者執行緒進行處理,這樣就可以避免任務的處理響應緩慢的問題

5、Master-Worker模型
核心思想:系統有兩個程序協作工作
Master程序,負責接收和分配任務;
Worker程序,負責處理子任務。
當Worker程序將子任務處理完成後,結果返回給Master程序,由Master程序做歸納彙總,最後得到最終的結果


Worker:用於實際處理一個任務;
Master:任務的分配和最終結果的合成;
Main:啟動程式,排程開啟Master。
CSP模型 待研究