目錄生產者消費者模式就是通過乙個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇列,消費者不找生產者要資料,而是直接從阻塞佇列裡取,阻塞佇列就相當於乙個緩衝區,平衡了生產者和消費者的處理能力。這個阻塞佇列就是用來給生產者和消費者解耦的。
乙個程式設計方式
321原則
三種角色:生產者、消費者、倉庫
兩種關係:生產者與生產者之間是互斥關係,消費者與消費者之間是互斥關係,生產者與消費者之間是同步與互斥關係。
乙個交易場所:倉庫(這裡我們用阻塞佇列來表示)
什麼是生產者
生產資料 把資料放在容器中 這個程序就是生產者
什麼是消費者
在容器中取資料的程序 這個程序就是消費者
容器就是緩衝區(佇列).乙個緩衝區,平衡了生產者和消費者的處理能力。.提高了效率
優點
解耦–生產者。消費者之間不直接通訊,降低了耦合度。
支援併發
支援忙閒不均
from multiprocessing import process
from multiprocessing import queue
import random
import time
def task1(q):#生產者
for i in range(6):
time.sleep(random.randint(1,3))
q.put(f'號包子')
print(f'生產者生產了號包子')
def task2(q):#消費者
while 1:
try:
time.sleep(random.randint(1, 3))
q1=q.get(timeout=3)
print(f'消費者取得')
except exception:
return
if __name__ == '__main__':
q=queue()
p1=process(target=task1,args=((q,)))
p2=process(target=task2,args=((q,)))
p1.start()
p2.start()
生產者消費者模型
1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...
生產者消費者模型
生產者與消費者 3,2,1 三種關係 生產者與消費者 互斥,同步 消費者與消費者 互斥 生產者與生產者 互斥 條件變數 int pthread cond destroy pthread cond t cond int pthread cond init pthread cond t restrict...
生產者消費者模型
當佇列滿時,生產者需要等待佇列有空間才能繼續往裡面放入商品,而在等待的期間內,生產者必須釋放對臨界資源 即佇列 的占用權。因為生產者如果不釋放對臨界資源的占用權,那麼消費者就無法消費佇列中的商品,就不會讓佇列有空間,那麼生產者就會一直無限等待下去。因此,一般情況下,當佇列滿時,會讓生產者交出對臨界資...