Producer-Consumer模型:一、簡介
阿新 • • 發佈:2018-11-28
Producer-Consumer模型是一種為了加快系統響應資料的非同步模型。
1.它試圖解決什麼問題?
系統中一些慢操作(例如網路IO,資料統計等等)會阻塞主程序的執行,從而使得系統的吞吐量大大降低。如果我們不需要即使得到這些慢操作的返回結果,那麼我們可以使用非同步的方式來解決這個問題。
2. 它的應用場景
例如郵件傳送服務,日誌列印,報表生成等。如果這些操作由系統直接處理,那會使當前執行緒等待很長的時間(會有造成程式卡死的假象)。如果系統的訪問量很高,這種操作會佔用大量系統資源,使得伺服器資源耗盡。
3. 總體架構
Producer-Consumer模型通常是多對多的關係,即多個生產者對應多個消費者,他們之間通過共享一個佇列來實現通訊和同步。生產者負責把請求(例如傳送簡訊的內容和手機號)放到佇列中,消費者負責從佇列中出去請求並作響應的處理(例如傳送一條簡訊)。
注意消費者的數量依賴於具體情況,例如消費者需要做大量的資料統計任務那麼消費者的數量因該和CPU核心的數量大體一致。如果消費者需要等待長時間的網路等待,則需要考慮系統的頻寬。
4. Producer-Consumer模型的不足
首先這是一個非同步模型,這意味著我們不能在當前執行緒得到返回的結果。
非同步模型涉及到多個執行緒間的協作,也就是說資料需要在多個執行緒中共享,並且保持資料狀態的同步。
Producer-Consumer模型通常作為一個service來為系統提供服務。當系統停止的時候我們需要小心的關閉這個service,必須保證所有的請求都得到處理,並且所有的資源都得到釋放。