併發程式設計之生產者消費者模型

2022-09-02 14:36:09 字數 2627 閱讀 7346

在程式執行中,例如:爬蟲..

1 從網路上爬取資料,這個階段,由於網路原因,一般速度是比較慢的

2 在這些資料中篩選我想要的東西,cpu執行速度很快,這個過程就是比較快的

那麼這樣子執行下來就會造成,我十分鐘爬取到的資料,我花一分鐘就處理完了..這就造成了,cpu要長時間在等待資料的到來..

在我們實際生活中:

1 廠家生產出來的東西,一直沒有人買,(供大於求)商品可能會漲價

2 廠家生產出來的東西.不夠消費者使用的(供不應求).商品就可能降價

為了達到相對的平衡,讓社會更好的發展..於是,就產生了生產者,消費者模型..

通過對速度快的一方進行減少(10*(5-3)=20),對速度慢的一方

1

import

time

2from multiprocessing import

process, queue34

5def

cook(plate):

6"""

7廚師(生產者)

8"""

9while 1:

10 time.sleep(0.1) #

廚師每0.1秒做出乙個蛋糕

11 plate.put("蛋糕"

)12print("

廚師做出了一塊蛋糕...")

1314

defeat(plate):

15"""

16食客(消費者)

17"""

18while 1:

19 time.sleep(0.01) #

每個食客每0.01秒就把蛋糕吃完了

20plate.get()

21print("

一塊蛋糕被吃掉了")

2223

2425

if__name__ == '

__main__':

26 plate =queue()

27for i in range(3):28#

生出3個廚師和3個食客

29 cooker = process(target=cook, args=(plate, ))

30cooker.start()

31for j in range(3):

32 eater = process(target=eat, args=(plate, ))

33 eater.start()

這樣子**執行..基本是廚師生產蛋糕就被吃掉,(供不應求)

結果對照:

1

廚師做出了一塊蛋糕...

2一塊蛋糕被吃掉了

3廚師做出了一塊蛋糕...

4一塊蛋糕被吃掉了

5廚師做出了一塊蛋糕...

6一塊蛋糕被吃掉了

7廚師做出了一塊蛋糕...

8一塊蛋糕被吃掉了

9廚師做出了一塊蛋糕...

10 一塊蛋糕被吃掉了

1

defcook(plate):

2"""

3廚師(生產者)

4"""

5while 1:

6 time.sleep(0.1) #

廚師每0.1秒做出乙個蛋糕

7 plate.put("蛋糕"

)8print("

廚師做出了一塊蛋糕...")

910defeat(plate):

11"""

12食客(消費者)

13"""

14while 1:

15 time.sleep(0.01) #

每個食客每0.01秒就把蛋糕吃完了

16plate.get()

17print("

一塊蛋糕被吃掉了")

1819

2021

if__name__ == '

__main__':

22 plate =queue()

23for i in range(10):24#

生出10個廚師

25 cooker = process(target=cook, args=(plate, ))

26cooker.start()

27for j in range(3):28#

生成3個食客

29 eater = process(target=eat, args=(plate, ))

30 eater.start()

結果對照:

1

廚師做出了一塊蛋糕...

2一塊蛋糕被吃掉了

3廚師做出了一塊蛋糕...

4廚師做出了一塊蛋糕...

5廚師做出了一塊蛋糕...

6一塊蛋糕被吃掉了

7一塊蛋糕被吃掉了

8一塊蛋糕被吃掉了

9廚師做出了一塊蛋糕...

10一塊蛋糕被吃掉了

11廚師做出了一塊蛋糕...

12 一塊蛋糕被吃掉了

這樣子產出和消費基本持平,,就達到了最終的目的...

golang 併發程式設計之生產者消費者

golang 最吸引人的地方可能就是併發了,無論 的編寫上,還是效能上面,golang 都有絕對的優勢 學習乙個語言的併發特性,我喜歡實現乙個生產者消費者模型,這個模型非常經典,適用於很多的併發場景,下面我通過這個模型,來簡單介紹一下 golang 的併發程式設計 協程go golang 為併發而生...

golang 併發程式設計之生產者消費者

golang 最吸引人的地方可能就是併發了,無論 的編寫上,還是效能上面,golang 都有絕對的優勢 學習乙個語言的併發特性,我喜歡實現乙個生產者消費者模型,這個模型非常經典,適用於很多的併發場景,下面我通過這個模型,來簡單介紹一下 golang 的併發程式設計 協程go golang 為併發而生...

併發程式設計之生產者消費者設計模式

在併發程式設計中使用生產者和消費者模式能夠解決絕大多數併發問題。該模式通過平衡生產線程和消費執行緒的工作能力來提高程式的整體處理資料的速度。什麼是生產者消費者模式 生產者消費者模式是通過乙個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生...