Java并发 -- 生产者-消费者模式
生产者-消费者模式
- 生产者-消费者模式的核心是一个_任务队列_
- 生产者线程生产任务,并将任务添加到任务队列中,消费者线程从任务队列中获取任务并执行
- 从架构设计的角度来看,生产者-消费者模式有一个很重要的优点:_解耦_
- 生产者-消费者模式另一个重要的优点是支持异步,并且能够平衡生产者和消费者的速度差异(任务队列)
支持批量执行
- 往数据库INSERT 1000条数据,有两种方案
- 第一种方案:用1000个线程并发执行,每个线程INSERT一条数据
- 第二种方案(更优):用1个线程,执行一个批量的SQL,一次性把1000条数据INSERT进去
- 将原来直接INSERT数据到数据库的线程作为生产者线程,而生产者线程只需将数据添加到任务队列
- 然后消费者线程负责将任务从任务队列中批量取出并批量执行
1 | // 任务队列 |
支持分阶段提交
- 写文件如果同步刷盘性能会很慢,对于不是很重要的数据,往往采用异步刷盘的方式
- 异步刷盘的时机
- ERROR级别的日志需要立即刷盘
- 数据累积到500条需要立即刷盘
- 存在未刷盘数据,且5秒钟内未曾刷盘,需要立即刷盘
- 该日志组件的异步刷盘本质上是一种分阶段提交
1 | public class Logger { |
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.