这里是Themberfue
阻塞队列
· 在学习数据结构的时候,我们学习到了一个数据结构——队列——优先级队列,什么?忘了?没事,忘了是很正常的,温故而知新,可以为师矣~~
· 今天我们将深入——阻塞队列,其也可以称为一种新的数据结构,但它和队列还是有区别的
· 主要区别在于阻塞队列是线程安全的,还有其阻塞特性
· 阻塞特性:
当队列放满时,如果此时还有线程想要入队列时,那么这个操作就会阻塞,直到有元素出队列为止
但队列为空时,如果此时还有线程想要出队列时,那么这个操作也会阻塞,直到有元素入队列为止
生产者-消费者模型
· 我们先不聊其概念,我们先来构建一个场景:餐厅中的点餐和上菜过程:
· 在餐厅中,顾客点单和厨师制作菜品,有源源不断地顾客点单,同时厨师也一丝不苟地制作菜品以服务顾客,而顾客点的单不可能直接给到厨师手里,一般是通过前台服务员告知厨师需要制作相应地菜品
· 我们将顾客类比为 "生产者",将厨师类比为 "消费者",如果 顾客 直接将订单交给 厨师 处理,那么 厨师 还要额外处理收取并处理这些订单,不能聚焦于制作菜品
· 不单单时 厨师 会降低效率,如果此时订单太多,厨师 往往会处理不过来了,那么该订单就会丢失了;如果此时订单太少,厨师 还在制作菜品,导致不必要的浪费
· 此时我们引入前台,顾客 将订单先交给前台,由前台收取并处理这些订单,厨师 只需要聚焦于制作菜品就好了,这将大大提升 厨师 的效率
· 前台就可以类比为一个订单队列,当 订单队列 满时,顾客就需要等待,当订单队列为空时,厨师就需要等待
· 生产者-消费者模型:
一种经典的并发设计模式,常用于解决多线程环境下的生产和消费任务协调问题。它通过共享缓冲区(通常是一个阻塞队列)来解耦生产者和消费者之间的耦合,解决生产速度和消费速度不匹配的问题
设计目标:
1. 解耦生产者和消费者:生产者和消费者可以独立运行,无需直接依赖对方
2. 平衡处理速度:通过缓冲区调节生产速度和消费速度的不匹配
3. 线程安全:避免多个线程对共享资源的竞争导致的并发问题
· 生产者-消费者模型优势:
1.