首頁 > 後端開發 > Golang > 主體

生產者/消費者

王林
發布: 2024-07-24 11:51:42
原創
228 人瀏覽過

定義

我們考慮兩個進程,分別稱為「生產者」和「消費者」。生產者是一個循環過程,每次循環都會產生一定部分的訊息,這些訊息必須由消費者處理。消費者也是一個循環過程,每次它經歷它的週期時,它都可以處理下一個訊息,因為它是由生產者產生的。計算過程給出了一個簡單的例子,該計算過程產生由穿孔卡打孔的穿孔卡的「資訊部分」圖像,穿孔卡扮演消費者的角色。 [1]

Producer/Consumer (Produtor/Consumidor)

解釋

生產者會建立專案並將其儲存在資料結構中,而消費者則從該結構中刪除項目並處理它們。

如果消費大於生產,則緩衝區(資料結構)清空,消費者沒有什麼可消費的
如果消耗量小於生產量,則緩衝區已滿,生產者無法增加更多項目。這是一個經典問題,稱為有限緩衝區.

問題的情境化

假設我們有一個生產者在緩衝區中發布一封電子郵件,以及一個消費者使用緩衝區中的電子郵件並顯示一條訊息,說明已使用輸入的電子郵件的新訪問密碼發送了一封電子郵件。

執行

雷雷

解釋實施

  • 首先,我們建立一個名為buffer的結構,其中包含一個名為items的字串陣列和一個名為mu的類似互斥的控制機制,用於管理並發存取。
  • 我們有兩個函數:一個稱為add,它基本上將一個項目添加到緩衝區中,只要有可用空間,因為緩衝區容量只有5 個項目;另一個get 調用,如果緩衝區中有項目,則傳回第一個元素並從緩衝區中刪除該元素。
  • 生產者基本上從循環中獲取索引並將其連接成一個名為str的字串,其中包含索引和虛擬電子郵件域,並將其添加到緩衝區中。新增了時間間隙來模擬延遲。
  • 消費者
  • 從緩衝區請求一個項目(如果它至少有一個項目)。然後,消費者在螢幕上顯示一條訊息,通知已發送一封電子郵件,其中包含緩衝區中發布的項目的新存取密碼。
程式碼連結:

https://github.com/jcelsocosta/race_condition/blob/main/ Producerconsumer/buffer/ Producerconsumer.go 參考

https://www.cs.utexas.edu/~EWD/transcriptions/EWD01xx/EWD123.html#4.1.%20Typical%20Uses%20of%20the%20General%20Semaphore.
  1. 參考書目

https://www.cin.ufpe.br/~cagf/if677/2015-2/slides/08_Concorrencia%20(Jorge).pdf

以上是生產者/消費者的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!