zoukankan      html  css  js  c++  java
  • 无锁并行框架构建复杂消费模型

    • 复杂场景下使用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不行

  • 相关阅读:
    HDU 6430 Problem E. TeaTree(虚树)
    hdu6437 Problem L.Videos(网络流)
    Rikka with Prefix Sum(组合数学)
    借教室
    2018年全国多校算法寒假训练营练习比赛(第五场)H Tree Recovery
    1296 营业额统计
    FZU oj Problem 2082 过路费
    大数乘法(适合k进制)
    重载小于号
    莫比乌斯
  • 原文地址:https://www.cnblogs.com/shmilyToHu/p/6527454.html
Copyright © 2011-2022 走看看