无锁并行框架构建复杂消费模型
2017-03-09 19:53
176 查看
复杂场景下使用RingBuffer(P1生产的数据给C1、C2并行执行,最后C1、C2执行结束后C3执行) 这是一种菱形操作
顺序执行操作,这个操作比较简单,(P1生产的数据给C1,C1执行完成后,给C2)
六边形执行操作,这个操作比较复杂,(P1生产的数据给C1A,C2A,这两个执行完成后,分别丢给C1B,C2B执行,最后,等C1B,C2B执行结束后,C3才开始执行)
下面看一下这三种方式实现的demo:
首先,先建立一个event类:
其次要一个event工厂类(eventfactory)
这个工厂类,我们使用匿名内部类来实现。
下面看一下main方法:
下面看一下main方法里面出现的5个消费类:
Handler1:
Handler2:
Handler3:
Handler4:
Handler5:
下面看一下生产类:
生产者每次生产一个事件,供消费者消费:
下面看一下不同的操作,打印的结果有什么不同,
菱形操作
handler2跟handler1同时执行,等都执行完成后,handler3才开始执行,这点可以从handler3的打印结果看出来;
顺序操作:
handler1先执行,执行大概1s后,handler2才开始执行,最后,handler3才开始执行;
六边形操作:
首先,解读一下六边形操作的代码:
Disruptor先去把事件丢给h1和h2执行,h1执行完成后,丢给h4执行,h2执行完成后,丢给h5执行,等待h4和h5都执行完成后,h3在开始执行。
从打印结果上也看的出来这样的执行顺序,,这就是disruptor的六边形操作。
只有disruptor才能使用这些操作,RingBuffer不行
顺序执行操作,这个操作比较简单,(P1生产的数据给C1,C1执行完成后,给C2)
六边形执行操作,这个操作比较复杂,(P1生产的数据给C1A,C2A,这两个执行完成后,分别丢给C1B,C2B执行,最后,等C1B,C2B执行结束后,C3才开始执行)
下面看一下这三种方式实现的demo:
首先,先建立一个event类:
其次要一个event工厂类(eventfactory)
这个工厂类,我们使用匿名内部类来实现。
下面看一下main方法:
下面看一下main方法里面出现的5个消费类:
Handler1:
Handler2:
Handler3:
Handler4:
Handler5:
下面看一下生产类:
生产者每次生产一个事件,供消费者消费:
下面看一下不同的操作,打印的结果有什么不同,
菱形操作
handler2跟handler1同时执行,等都执行完成后,handler3才开始执行,这点可以从handler3的打印结果看出来;
顺序操作:
handler1先执行,执行大概1s后,handler2才开始执行,最后,handler3才开始执行;
六边形操作:
首先,解读一下六边形操作的代码:
Disruptor先去把事件丢给h1和h2执行,h1执行完成后,丢给h4执行,h2执行完成后,丢给h5执行,等待h4和h5都执行完成后,h3在开始执行。
从打印结果上也看的出来这样的执行顺序,,这就是disruptor的六边形操作。
只有disruptor才能使用这些操作,RingBuffer不行
相关文章推荐
- 构建Java并发模型框架
- 构建Java并发模型框架
- 构建Java并发模型框架
- 构建Java并发模型框架
- Tiny并行计算框架之复杂示例
- 构建Java并发模型框架
- 从头认识java-13.5 利用泛型构建复杂模型
- 构建自己的Java并发模型框架
- 构建Java并发模型框架
- GraphLab面向机器学习的并行框架『针对图数据处理模型』
- 多线程开发的捷径:构建Java并发模型框架
- 构建Java并发模型框架
- 多线程开发的捷径:构建Java并发模型框架
- 构建自己的Java并发模型框架
- 【构建Java并发模型框架】
- 快速构建MMO服务器框架(六)asio稍微复杂一些的例子:高并发echo
- 构建Java并发模型框架
- 快速构建MMO服务器框架(六)asio稍微复杂一些的例子:高并发echo
- 用泛型构建复杂容器模型
- Tiny并行计算框架之复杂示例