Golang:再談生產者消費者模型

      網友投稿 934 2025-04-01

      Golang:再談生產者消費者模型

      那假如我們想生產完了之后在一次性消費呢?怎么實現?那我們就出現了調度的情形。消費者等生產者生產完畢的信號,只有生產者給消費者發送信號,消費者才能消費,不然消費者一直阻塞。

      主函數

      我們先來看看主函數:

      func main() { chanShop := make(chan string,10) chanTel := make(chan int) go Producer(chanShop,chanTel) go Consumer(chanShop,chanTel) for { time.Sleep(time.Second) } }

      chanTel沒有緩存能力,我們之前說的,如果不往里寫,那根本就不能讀。所以被阻塞的那條消費者協程在讀取前幾乎不占用資源。

      生產者協程

      Golang:再談生產者消費者模型

      再來看看生產者協程:

      func Producer(chanShop chan string,chanTel chan int) { runtime.GOMAXPROCS(2) for i:=0;i<10;i++ { product := strconv.Itoa(time.Now().Nanosecond()) chanShop <- "產品"+product fmt.Println("生產了產品",product) time.Sleep(time.Second) } close(chanShop) fmt.Println("生產完畢") chanTel <- 123456789 fmt.Println(123456789,"呼出電話") }

      生產10個商品,生產完畢之后,就開始打電話,給消費者協程打電話。生產者協程給chanTel寫入東西,阻塞的消費者協程立刻就通順了,來看看消費者協程的內容吧!

      消費者協程

      func Consumer(chanShop chan string,chanTel chan int) { runtime.GOMAXPROCS(1) tel := <- chanTel fmt.Println("收到來電",tel) for product := range chanShop{ fmt.Println("消費了產品",product) } fmt.Println("消費完畢") }

      消費者調用單核處理消費。當收到來電時,該協程就不阻塞了,馬上消費產品!

      看了上面的例子,你可能還會疑惑什么是生產者消費者問題,最后我們再來了解了解吧!

      什么是生產者消費者問題

      根據維基百科,生產者消費者問題是這樣介紹的:

      生產者消費者問題(英語:Producer-consumer problem),也稱有限緩沖問題(Bounded-buffer problem),是一個多進程同步問題的經典案例。該問題描述了共享固定大小緩沖區的兩個進程——即所謂的“生產者”和“消費者”——在實際運行時會發生的問題。生產者的主要作用是生成一定量的數據放到緩沖區中,然后重復此過程。與此同時,消費者也在緩沖區消耗這些數據。該問題的關鍵就是要保證生產者不會在緩沖區滿時加入數據,消費者也不會在緩沖區中空時消耗數據。

      我們這段代碼只是簡單的描述這個問題,在寫入緩沖區完畢后,緩沖區大小為10,我們就寫入10個,然后就馬上關閉chanShop,關閉后消費者協程就不會一直讀而導致在緩沖區中空時嘗試讀取數據。

      任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:甲方裝修項目進度表(裝修公司項目進度表)
      下一篇:字體怎樣調整變大
      相關文章
      亚洲成年人啊啊aa在线观看| 亚洲国产一区二区a毛片| 亚洲综合在线视频| 亚洲永久精品ww47| 亚洲国产婷婷综合在线精品| 亚洲国产欧美国产综合一区| 亚洲人成在久久综合网站| 亚洲黑人嫩小videos| 亚洲天天在线日亚洲洲精| 亚洲av色福利天堂| 亚洲AV日韩AV永久无码绿巨人| 亚洲AV无码乱码国产麻豆穿越| 亚洲狠狠婷婷综合久久久久| 国产AV无码专区亚洲AWWW| 亚洲一区二区三区影院| 国产亚洲精AA在线观看SEE| 国产成人亚洲精品青草天美| 亚洲人成色777777在线观看| 亚洲国产精品无码专区影院| 国产亚洲婷婷香蕉久久精品 | 亚洲人成无码www久久久| 亚洲AV伊人久久青青草原| 国产成人亚洲毛片| yy6080亚洲一级理论| av无码东京热亚洲男人的天堂| 亚洲成a人片在线观看久| 久99精品视频在线观看婷亚洲片国产一区一级在线| 亚洲国产精品视频| 国产亚洲精品不卡在线| 亚洲精品无码不卡在线播HE | 久久精品国产亚洲沈樵| 亚洲AV综合色区无码一区| 亚洲AV日韩AV高潮无码专区| 日韩精品亚洲人成在线观看| 亚洲精品中文字幕麻豆| 久久精品国产亚洲AV忘忧草18| 亚洲一卡一卡二新区无人区| 亚洲a∨无码一区二区| 国产AV日韩A∨亚洲AV电影 | 亚洲精品麻豆av| 久久精品国产亚洲网站|