babylon

[English]

execution_queue

原理

包装ConcurrentBoundedQueue,实现按需激活MPSC消费者的模式

主要用于支持大量低活队列的情况,节省不活跃的监听消费线程,功能和bthread::ExecutionQueue类似,但是

用法示例

#include "babylon/concurrent/execution_queue.h"

using ::babylon::ConcurrentExecutionQueue;

// 显式定义一个队列
using Queue = ConcurrentExecutionQueue<T>;
Queue queue;

// 设置队列容量到N
// 消费者采用some_executor执行
// 注册lambda消费函数
queue.initialize(N, some_executor, [] (Queue::Iterator iter, Queue::Iterator end) {
  // 消费区间的数据
  while (iter != end) {
    T& item = *iter;
    do_sth_with(item);
    ++iter;
  }
});

// 生产一个数据,并按需启动后台消费
queue.execute("10086");
...

// 等待当前发布数据全部消费完成
// 注意不包含stop语义,可以反复execute & join
queue.join();