1

我的问题是关于 boost asio 的 io_service。当我用那个方法调用它时:

int main()
{
  try
  {
    boost::asio::io_service io_service;
    Server server(io_service);
    std::vector<boost::shared_ptr<boost::thread> > threads;
    for (std::size_t i = 0; i < 16; ++i)
    {
        boost::shared_ptr<boost::thread> thread(new boost::thread(boost::bind(&boost::asio::io_service::run, &io_service)));
        threads.push_back(thread);
    }
    for (std::size_t i = 0; i < threads.size(); ++i)
    threads[i]->join();
  }
  catch (std::exception& e)
  {
    std::cerr << e.what() << std::endl;
  }

  return 0;
}

它会动态共享请求线程,还是只为连接组提供一个线程?谢谢。

4

1 回答 1

2

asio::io_service有一个共享的事件队列。这些事件由当前调用 io_service::run() 的线程处理。所以是的,处理程序可能会从不同的线程中调用。

我不建议你为你的服务器运行 16 个线程,因为它会让你变慢(因为上下文切换和boost::asio 瓶颈)。如果你真的需要这么多线程,那么更喜欢使用“每个线程的 io_service”习语。

于 2013-11-14T13:11:38.533 回答