包装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();