我想扩展基于 io_context 的工作队列,因此它还将执行不涉及网络通信的同步/异步任务……所以这是我定义消费者线程的方式
// class members
boost::thread_group workers_;
boost::asio::io_context ioc_;
// the main run method
for (size_t i = 1; i < kThreads; ++i) {
workers_.create_thread([this]() {
ioc_.run();
});
}
ioc_.run();
workers_.join_all();
以下是串行命令的一些用法示例
boost::asio::strand<boost::asio::io_context::executor_type> strand_;
....
strand_(boost::asio::make_strand(ioc_))
....
boost::asio::post(strand_, [=]() { auto resp = doSomeStuffInForeground());
并平行
boost::asio::spawn(ioc_, [=](const boost::asio::yield_context &yield) {
doSomeStuffInBackground(yield);
});
现在我的程序有更多的任务而不是网络通信,我想回收那些与 iocontext 相关的线程来操作它们(即将非通信相关的代码放入doSomeStuffBackground
和/或doSomeStuffForeground
)。我想知道这是否是一个好方法……</p>
另外,我想知道我是否可以定义一些优先于其他任务的优先任务最后,我想知道我是否可以从队列中聚合/合并几个相似的任务。谢谢您的帮助 !