生产者消费者模型

生产者消费者模型设计

  • 生产者需要安全地将数据交给消费者
  • 当生产者和消费者在不同的线程运行时,两者的处理速度差异会有问题。生产者消费者模型用于消除线程间处理速度的差异带来的问题
  • 在该模式中,生产者和消费者会有多个,当生产者和消费者只有一个时,成为Pipe(管道)模式
  • 线程协调和互斥问题(保护哪些数据),线程的协调需要考虑“放在中间的东西”,线程的互斥需要考虑保护哪些东西,为了让线程协调进行,必须进行互斥处理,以防止更多的内容被破坏,线程的互斥处理时为了线程的协调运行而执行的
    在这里插入图片描述
    为什么要有Channel?
  • Consumer想要获取Data,通常是因为想要使用Data来执行某些处理,如果Producer直接调用Consumer的方法,执行处理的就不是Consumer的线程,而是Producer的线程了。这样,异步处理就变成了同步处理,效率就会降低
  • 同时承担安全守护责任,执行线程间的互斥处理,确保Producer产生的Data能够传递给Consumer

Channel的选择

  • 队列–先生产先消费
  1. synchronzied、wait和notifyAll的使用
  2. ReentrantLock和Condition组合
  3. 使用BlockingQueue
  • 栈–先生产后消费
  • 优先队列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值