本文描述了在一个disruptor中生产者和消费者之间是如何通过sequence进行协作的,以及如何通过sequence构建一个类似数据追赶模型的.
本文采用基本的一个生产者和一个消费者的处理模型进行描述.
所谓的追赶模型,即理解为2个数字A和B,当A要进行+1操作时,需要判断A<B,如果满足此条件,则可以进行操作,否则就等待,直到B进行操作从而满足条件A<B时才继续进行自身的操作.
从生产者/消费者模型来看,就相当于,生产者需要生产时,不再需要判断是否存在可存放的位置,而是判断要存放东西的位置是否还没有被消费,即生产位置 数<消费位置数;对于消费者,不再需要判断是否有没有被消费的物品,而是判断当前消费的数目是否小于生产的数目,即消费数<生产数.如果满 足,即获取指定位置的数据本身进行处理,然后自身位置数/数目+1操作,然后进行同样的处理.
这里面有2个区别的信息,位置数即在一个ringBuffer环中的下标值(最大值ringBuffer的长度),而数目则指不断的生产/消费的累积数(最大值Long.MaxValue).
以下分2个场景分别描述生产者通过持有消费者sequence用于进行生产判断,消费者通过持有生产者sequence用于进行消费判断.