1.特点:生产者-消费者模式的核心是一个任务队列,生产者线程生产任务,并将任务添加到任务队列中,而消费者线程从任务队列中获取任务并执行!
生产者-消费者模式示意图
2.优点:1)解耦 2)支持异步,并且能够平衡生产者和消费者的速度差异
2.应用场景:对比轻量级线程还有啥可做的?如果使用轻量级线程,就没有必要平衡生产者和消费者的速度差异了,因为轻量级线程本身就是廉价的!所以生产者消费者的应用还是相比轻量机线程有啥好的应用!
1)批量执行
场景说明:监控系统采集数据,如果按照原来的想法,我们是每次采集完一条数据,就进行一次insert,那就是一个线程一个insert。那我们通过批量执行的思路就是,我每次采集完只要放到任务队列当中就可以了,然后我消费者,从队列中批量获取任务,然后批量insert!如下图,监控代理相当于生产者,产生的任务放到队列中,然后监控系统作为消费者,批量从队列中获取任务,插入数据库!
动态采集
2)分阶段提交
场景说明:日志的异步刷盘!比如刷盘的时机是:1.ERROR级别的日志需要立即刷盘;2.数据积累到500条需要立即刷盘;3.存在未刷盘数据,且5秒钟内未曾刷盘,需要立即刷盘。这其实本质上就属于分阶段,如果这种分阶段的话,利用原来的线程思路是没办法做的,只能通过一个队列存储任务,然后消费者线程进行做判断!这也是生产者消费者的核心(队列)
扩展--》操作系统: