zoukankan      html  css  js  c++  java
  • 生产者消费者模型

    生产着消费者模型.

    生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。

    一个编程方式

    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'{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()
    
  • 相关阅读:
    对于进程的理解
    反汇编引擎实现——流程分析
    window异常处理——except_handler4以及栈展开分析
    对于硬盘驱动的理解
    对文件系统的理解
    移动端适配flexible.js
    vue学习(5)-评论功能(利用父组件的方法)
    vue学习(4)-组件的创建,父子组件传值,$refs
    vue学习(3)-增删改查
    vue学习(2)-过滤器
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12388477.html
Copyright © 2011-2022 走看看