03disruptor的使用及缺陷disruptor的使用disruptor的使用代码可以见git仓库,这里仅仅对使用流程做一下简单介绍。消费者读数据消费者读数据的步骤如下:1.注册消费者,此时每个消费者会返回一个可读的消费者索引index_for_customer_use2.使用index_for_customer_use在共享内存环形队列上等待,直到该索引位置可读,将返回一个新的索引curso
环形队列这个环形队列的原理很简单,前面已经介绍过,再次进行简略说明:cap大小必须是2的N次方索引可以一直递增访问元素时索引需要对cap取模实现代码很简单,不再介绍。template<typename T>class RingBuffer{ public: RingBuffer() { capacity_ = D
disruptor详解disruptorCpp-IPCdisruptor原理使用循环队列,且要求队列大小为2的N次方,以满足位运算快速计算索引的要求(比取模速度快)使用原子变量记录生产者和消费者的个数,并且使用cache line进行隔离,避免多线程情况下由于两个变量处于同一cache line的伪共享问题无锁设计。通过原子变量,每个生产者和消费者都需要先申请数组中
内存对齐与伪共享时间测试类该类会在后续的测试中用于运行时间测试。// public/timer.h#include <chrono>#include <iostream>#include <functional>struct ScopeTimer{ ScopeTimer(const char *msg):_msg(msg),_now(std::chrono
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号