您当前的位置: 首页 > 

阿里P8终于讲明白了生产者-消费者模式!

发布时间:2021-05-24 10:20:00 ,浏览量:0

核心是一个任务队列,生产者线程生产任务,并将任务添加到任务队列中,而消费者线程从任务队列中获取任务并执行。该模式有如下优点:

1 解耦

解耦的关键:组件之间的依赖关系和通信方式受限。生产者、消费者之间无任何依赖关系,彼此通信只能通过任务队列。

2 异步

平衡生产者、消费者的速度差异。生产者线程只需要将任务添加到任务队列,无需等待任务被消费者线程执行完,即任务的生产、消费是异步的。

异步化处理最简单的方式:创建一个新线程处理,那中间加个“任务队列”有啥用?平衡生产者和消费者的速度差异。 假设生产者速率慢,消费者速率高,1:3,若生产者有3个线程

  • 采用创建新线程,则会创建3个子线程
  • 采用生产者-消费者模式,消费线程只需要1个

由于Java线程和os线程一一对应,线程创建得太多,会增加上下文切换成本。生产者-消费者模式恰好能支持使用合适数量的线程。

3 批量执行

若使用轻量级线程,就没必要平衡生产者、消费者速度差异,那是否说明生产者-消费者模式在性能优化方面就无用武之地? 不是,有类并发场景应用生产者-消费者模式就有奇效:批量执行任务。

如在DB INSERT 1000条数据,方案:

  • 用1000个线程并发执行,每个线程INSERT一条数据
  • 用1个线程,执行一个批量SQL,一次性把1000条数据INSERT进去 该方案效率更高,即批量执行场景。
4 分阶段

写文件时,若同步刷盘,性能很低,所以对不太重要数据,一般异步刷盘。对不同刷盘时机,提交刷盘任务。

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0762s