我对boost::asio
的经验不足。我有一些非常基本的问题。
我是否需要在不同的io_service
但只有一个socket
下使用不同的thread
和不同的acceptor
来处理线程服务器中的客户端?
我相信我必须为新客户提供不同的套接字。但是如果所有线程都使用相同的io_service
,它会是并行的吗?
我在asio部分经历了http://en.highscore.de/cpp/boost/index.html 这说我需要在不同的线程中使用不同的io_services来实现并行化。
如果我计划在new TCPsession
每次出现新客户时创建一个acceptor.async_accept
的Server类,
并且TCPSession
ctor创建了一个io_service
和一个thread
并在自己的帖子中运行io_service.run()
这是一个很好的设计吗?
但是在这个设计中我会加入所有这些线程吗?我需要io_service
main
,以便在获得新客户端之前不会终止吗?
答案 0 :(得分:9)
在单个线程中运行的单io_service
可以为项目中的所有asio对象提供服务。在这样的设计中,i / o仍然是“并行的”,因为它是非阻塞的,异步的;但由于io_service::run()
正在一个单独的线程中运行,所以所有的完成处理程序将被逐个串行调用。
要在多个CPU上扩展网络模块,您可以使用以下两种方法之一:每个核心的线程,每个核心的io_service - 请参阅HTTPServer2 and HTTPServer3 examples。
在任何情况下,创建一个主题或每个io_service
TCPSession
似乎都是一个不必要的开销 - 想想你有成千上万TCPSession
个......的情况。 / p>