生产者消费者模型

Posted saoqiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生产者消费者模型相关的知识,希望对你有一定的参考价值。

生产着消费者模型.

本质 队列间通信
为什么要使用生产者和消费者模式
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,**如果生产者处理速度很快**,**而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者**,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。
多个进程实现并发的效果: 生产者消费者模型.
3个成员 生产者 消费者 容器
模型, 设计模式,归一化设计, 理论等等,教给你一个编程思路.如果以后遇到类似的情况,直接套用即可.
如果没有容器, 生产者与消费者强耦合性.不合理.所以我们要有一个容器,缓冲区.平衡了生产力与消费力.
什么是生产者
生产数据 把数据放在容器中 这个进程就是生产者
什么是消费者
在容器中取数据的进程 这个进程就是消费者
容器
就是缓冲区(队列).一个缓冲区,平衡了生产者和消费者的处理能力。.提高了效率

实列

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'{i}号包子')
        print(f'生产者生产了{i}号包子')
def task2(q):#消费者
    while 1:
        try:
            time.sleep(random.randint(1, 3))
            q1=q.get(timeout=3)
            print(f'消费者取得{q1}')
        except Exception:
            return
if __name__ == '__main__':
    q=Queue()
    p1=Process(target=task1,args=((q,)))
    p2=Process(target=task2,args=((q,)))
    p1.start()
    p2.start()

以上是关于生产者消费者模型的主要内容,如果未能解决你的问题,请参考以下文章

golang生产者消费者模型示例代码

LINUX多线程(生产者消费者模型,POXIS信号量)

转: Java并发编程之十三:生产者—消费者模型(含代码)

Java生产消费者模型——代码解析

生产者消费者模型

生产者消费者模型-Java代码实现