生產者消費者模式

純潔的程式碼發表於2020-03-03
## 生產者消費者模式

就是在開發過程中,有一塊專門負責資料的產生,一塊專門負責資料的處理,中間使用一個緩衝區域來存放資料,這種模式就是生產者模式



優點:

**解耦**;使用了緩衝區之後生產者和消費者就解偶聯了,兩者不直接依賴,一方的程式碼發生變化另一方受到的影響就極為有限



**支援併發**:生產者不用依靠與消費者的處理速度;生產者直接把資料產生之後扔給緩衝區就行了,大大提高了生產者的速度,可以用來處理併發問題;而消費者來不及處理的資料可以暫時存放在緩衝區等待消費者慢慢處理



**資料單元**:資料單元是網路資訊傳輸的基本單位;這裡指的是每次生產者放到緩衝區的,就是一個資料單元;每次消費者從緩衝區取出的,也是一個資料單元

資料單元的特性:

​ **關聯到業務物件**:資料單元必須關聯到某種業務物件。在考慮該問題的時候,你必須深刻理解當前這個生產者/消費者模式所對應的業務邏輯,才能夠作出合適的判斷

​ **完整性**:就是在傳輸過程中,要保證該資料單元的完整。要麼整個資料單元被傳遞到消費者,要麼完全沒有傳遞到消費者。不允許出現部分傳遞的情形

​ **獨立性**:就是各個資料單元之間沒有互相依賴,某個資料單元傳輸失敗不應該影響已經完成傳輸的單元;也不應該影響尚未傳輸的單元(**資料傳輸失敗的原因**:假如生產者的生產速度在一段時間內一直超過消費者的處理速度,那就會導致緩衝區不斷增長並達到上限,之後的資料單元就會被丟棄。如果資料單元相互獨立,等到生產者的速度降下來之後,後續的資料單元繼續處理,不會受到牽連;反之,如果資料單元之間有某種耦合,導致被丟棄的資料單元會影響到後續其它單元的處理,那就會使程式邏輯變得非常複雜)

​ **顆粒度**:很多時候資料單元和業務物件是要一一對應的;有時出於效能等因素的考慮,也可能會把N個業務物件打包成一個資料單元。那麼,這個N該如何取值就是顆粒度的考慮了。顆粒度的大小是有講究的。太大的顆粒度可能會造成某種浪費;太小的顆粒度可能會造成效能問題。顆粒度的權衡要基於多方面的因素,以及一些經驗值的考量


相關文章