对于带有单个接受器的线程boost :: asio服务器,我们是否需要每个线程有多个io_service

Dip*_*Sen 8 c++ sockets boost boost-thread boost-asio

我没经验丰富boost::asio.我有一些非常基本的问题.

我需要有一个不同io_service,并且不同的socket根据不同thread,但一个单一的acceptor,要处理客户端的螺纹服务器?

我相信我必须为新客户提供不同的套接字.但是如果所有线程使用相同的线程io_service会是并行吗?

我在asio部分通过http://en.highscore.de/cpp/boost/index.html说我需要在不同的线程中使用不同的io_services来实现并行化.

我是否计划创建一个Server类,new TCPsession每次出现一个新客户端时创建一个,acceptor.async_accept
并且TCPSessionctor创建一个io_service和一个threadio_service.run()在其自己的线程中运行它会是一个好的设计吗?

但是在这个设计中我会加入所有这些线程吗?我是否需要另一个io_service,main以便即使在获得新客户之前它也不会终止?

Igo*_* R. 9

io_service在一个单独的线程运行可以servce项目中所有的ASIO对象.在这样的设计中,i/o仍然是"并行的",因为它是非阻塞的,异步的; 但由于io_service::run()是在一个单独的线程中运行,所以所有的完成处理程序将逐个串行调用.

要在多个CPU上扩展网络模块,可以使用以下两种方法之一:每个内核的线程,每个内核的io_service - 请参阅HTTPServer2和HTTPServer3示例.

在任何情况下,创建线程或io_serviceTCPSession在我看来是不必要的开销-想想,你已经有了成千上万的情况下的TCPSession小号...