最開始的 生產 - 消費 模式
生產者如果直接調用消費者的某個方法,有一個弊端。由于函數調用是同步的(或者叫阻塞的),在消費者的方法沒有返回之前,生產者只好一直等在那邊。萬一消費者處理數據很慢,生產者就會浪費掉時間。
使用了生產者/消費者模式之后,生產者和消費者可以是兩個獨立的并發主體(常見并發類型有進程和線程兩種)。生產者把制造出來的數據往緩沖區一丟,就可以再去生產下一個數據。基本上不用依賴消費者的處理速度。
生產者 - 消費者模式
生產者 - 消費者模式(Producer-Consumer Pattern)是一種經典的多線程 / 多進程設計模式,用于解耦 “生產數據” 和 “消費數據” 的過程,通過引入一個 緩沖區(隊列) 作為中間層,使生產者和消費者無需直接交互,從而實現異步解耦、支持并發處理。
生產者線程_1 ──> 緩沖區(隊列) ──> 消費者線程_1
生產者線程_2 ──> ──> 消費者線程_2
... ──> ──> ...
想要讓軟件更自適應的話,可以將 緩沖區(隊列) 替換成阻塞隊列。
阻塞隊列的定義
阻塞隊列是一種支持阻塞操作的隊列,當隊列滿時,嘗試向隊列中添加元素的線程會被阻塞,直到隊列中有空間;當隊列為空時,嘗試從隊列中移除元素的線程也會被阻塞,直到隊列中有元素可供移除。
阻塞隊列是怎么實現的?
阻塞隊列的底層實現依賴于不同的編程語言和操作系統,不過通常會運用 鎖、條件變量或者信號量 等同步機制來達成線程安全與阻塞操作。
TODO...
浙公網安備 33010602011771號