下面看一下多生产多消费者的模式,下面的代码是模拟100个生产者,每个生产者生产100个事件,然后有3个消费者,同时进行消费,共消费1W个事件,

下面看一下代码:

这边new出了3个消费者,并把消费者数组放入workPool这个消息队列中,然后在RingBuffer中获取事件,进行消费:

看一下event类:Order

下面看一下生产者:

把数据生产完成后,放入ringBuffer,然后进行事件发布

在看一下消费者:

通过一个原子类进行消费的记录查看哪个消费者消费了多少个事件,

查看一下打印的结果:

看一下最后的打印结果:

3个消费者,总共消费1000个事件,中间的协调通过SequenceBarrier进行消费协调;这种实现模式就是多消费者多生产者。需要注意的是RingBuffer和disruptor使用的范围,RingBuffer适合使用在不复杂消费模型上面,disruptor适合使用在复杂消费模型上,例如,菱形,顺序,六边形等。

java无锁消费者框架_无锁并行框架多生产者多消费者模型相关推荐

  1. java 生产者消费者模式_聊聊并发(十)生产者消费者模式

    本文首发于InfoQ   作者:方腾飞  校对:张龙 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使 ...

  2. java 单例 读写锁_终极锁实战:单JVM锁+分布式锁

    目录 1.前言 2.单JVM锁 3.分布式锁 4.总结 =========正文分割线================= 1.前言 锁就像一把钥匙,需要加锁的代码就像一个房间.出现互斥操作的典型场景:多 ...

  3. java共享锁和排他锁的区别_排他锁和共享锁分别是什么?有什么不同?

    分布式锁是控制分布式系统之间同步访问共享资源的一种方式.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致 ...

  4. java 偏向锁 重偏向_偏向锁的【批量重偏向与批量撤销】机制

    前言 从网上看了很多批量重偏向与批量撤销的介绍,但都一知半解,本着钻研的精神,使用数据进行分析批量重偏向与批量撤销的工作机制. 准备 首先,要先知道偏向锁的偏向锁机制,着重看下撤销机制. 然后,要知道 ...

  5. mysql 锁 行级_全局锁、表级锁、行级锁mysql 极客评论笔记

    根据加锁范围:MySQL里面的锁可以分为: 一.全局锁: 对整个数据库实例加锁. MySQL提供加全局读锁的方法:Flush tables with read lock(FTWRL) 这个命令可以使整 ...

  6. 姓名学中萍字无根 怎么解释_无根Buildah的工作原理:在非特权环境中构建容器

    姓名学中萍字无根 怎么解释 在以前的文章中,包括无根Podman如何工作? ,我谈到了Podman ,该工具使用户可以管理Pod,容器和容器图像. Buildah是用于构建与Podman互补的Open ...

  7. java 轻量级插件化框架_轻量级插件化框架——Small

    photo-1441716844725-09cedc13a4e7.jpg 前言 世界那么大,组件那么小.Small,做最轻巧的跨平台插件化框架. --Galenlin 这是Small作者,林光亮老师, ...

  8. JAVA并发编程 之 LMAX Disruptor使用实例(高效解决生产者与消费者问题)

    什么是Disruptor? Disruptor是一个开源的JAVA框架,它被设计用于在生产者-消费者(producer-consumer problem,简称PCP)问题上获得尽量高的吞吐量(TPS) ...

  9. JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池...

    /*** 多线程共享数据* 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行.* 多线程共享数据的安全问题,使用同步解决.* 线程同步两种方法: ...

  10. python模型训练框架_深度学习三大框架(对比)

    人工智能的浪潮正席卷全球,诸多词汇时刻萦绕在我们的耳边,如人工智能,机器学习,深度学习等."人工智能"的概念早在1956年就被提出,顾名思义用计算机来构造复杂的,拥有与人类智慧同样 ...

最新文章

  1. 高可用软件heartbeat服务章节目录(草稿)
  2. jQuery加载一个html页面到指定的div里
  3. gerrit的使用和配置
  4. 3D角色设定全析百图斩
  5. SendInput代替了keybd_event
  6. 解决Spring boot整合mybatis,xml资源文件放置及路径配置问题
  7. 【二分】【SPFA】架设电话线(jzoj 2132)
  8. wepyjs小程序组件调用pages页面的方法
  9. linux中c语言延时毫秒函数,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
  10. ssms只有空白解决方案_SSMS中的解决方案和项目概述
  11. Selenium2.41.0—获取动态资源 (转)
  12. 客所思S10外置USB独立声卡调试教程:K歌、聊天、变声、喊麦、电音等效果
  13. 时间序列的数据分析(三):经典时间序列分解
  14. php的repl是什么,更好的 repl
  15. Allure报告的安装及环境变量的配置和在pytest中调用
  16. 【数据结构与算法】专栏系列文章目录
  17. Avro RPC 之 Protocol 定义和代码生成
  18. syslog与rsyslog
  19. 青海大学计算机系大三课程表,青海大学计算机系文体部工作计划.doc
  20. 变时尚 Peugeot 307CC

热门文章

  1. OpenCV的数据类型——辅助对象
  2. MFC基于单文档制作吹彩色泡泡程序
  3. 图像处理中的通信原理——冈萨雷斯读书笔记(三)
  4. Android之Intent深入
  5. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 5丨至少有5名直接下属的经理【难度中等】
  6. Windows Terminal完整指南
  7. 转载:使用 Frida 来 hook 加固的 Android 应用的 java 层
  8. Frida Android hook
  9. 奇妙的安全旅行之DES算法(二)
  10. 服务器启动报错:One or more listeners failed to start. Full details will be found in the ...