我的问题是关于提升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;
}
它会动态共享请求的线程,还是只为连接组提供一个线程? 感谢。
答案 0 :(得分:2)
asio::io_service
有一个共享事件队列。这些事件由当前调用io_service :: run()的线程处理。所以,是的,可能会从不同的线程调用处理程序。
我不建议您为服务器运行16个线程,因为它会减慢速度(因为上下文切换和boost::asio bottleneck)。如果你真的需要这么多线程,那么更喜欢使用“io_service per thread”这个习惯用法。