认识生产者和消费者模式

认识生产者和消费者模式

生产者和消费者是多线程中很常见的一个问题。产生数据的模块儿,我们称之为生产者,而处理数据的模块,就称为消费者。但是单单只有生产者和消费者显然还是不够的,一般来说,我们还有一个缓冲区,抽象出来的流程如下图所示。

认识生产者和消费者模式

将这个过程以实际例子来说明:

假如我们是一个生产辣条的厂家,我们生产出来的辣条肯定是一箱一箱地放在仓库里面,然后卖出去给消费者。【不再考虑经销商环节】

1.我们把一箱一箱的辣条生产好。——>>>相当于生产者制造数据

2.我们把辣条放到仓库中。——>>>相当于将数据放到缓冲区

3.我们把辣条给取出来。——>>>相当于把数据从缓冲区取出

4.我们把取出的辣条卖给消费者吃掉。——>>>相当于从缓冲区出来的数据经过了处理

应用于爬虫

生产者:不断产生待爬取的url。【比如需要下载图片,此时就需要不断获取图片的url】

缓冲区:将获取到的url进行储存。

消费者:对生产者获取到的url从缓冲区拿出来,然后发起请求。【相当于对下载url】

对于通用爬虫(单线程)来说,我们拿到一个图片的url,然后就进行下载,效率太低。

对于异步爬虫(多线程)来说,我们可以同时从缓冲区取出多个图片的url,然后一次多张下载。