0

我想扩展基于 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>

另外,我想知道我是否可以定义一些优先于其他任务的优先任务最后,我想知道我是否可以从队列中聚合/合并几个相似的任务。谢谢您的帮助 !

4

0 回答 0