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
并且TCPSession
ctor创建一个io_service
和一个thread
并io_service.run()
在其自己的线程中运行它会是一个好的设计吗?
但是在这个设计中我会加入所有这些线程吗?我是否需要另一个io_service
,main
以便即使在获得新客户之前它也不会终止?
单io_service
在一个单独的线程运行可以servce项目中所有的ASIO对象.在这样的设计中,i/o仍然是"并行的",因为它是非阻塞的,异步的; 但由于io_service::run()
是在一个单独的线程中运行,所以所有的完成处理程序将逐个串行调用.
要在多个CPU上扩展网络模块,可以使用以下两种方法之一:每个内核的线程,每个内核的io_service - 请参阅HTTPServer2和HTTPServer3示例.
在任何情况下,创建线程或io_service
每TCPSession
在我看来是不必要的开销-想想,你已经有了成千上万的情况下的TCPSession
小号...