我在这方面经验不多boost::asio
。我有一些非常基本的问题。
我需要有一个不同的io_service
,以及一个不同的socket
在不同的thread
但只有一个acceptor
,在线程服务器中处理客户端?
我相信我必须为新客户提供不同的套接字。但如果所有线程都使用相同的io_service
会是平行的吗?
我正在经历http://en.highscore.de/cpp/boost/index.html在 asio 部分
这表示我需要在不同的线程中拥有不同的 io_services 才能实现并行化。
我如果我打算创建一个服务器类来创建new TCPsession
每次有新客户出现时acceptor.async_accept
and TCPSession
演员创建了一个io_service
and a thread
并运行该io_service.run()
在它自己的线程中这是一个好的设计吗?
然而,在这个设计中,我将在哪里加入所有这些线程?我还需要另一个吗io_service
for main
这样即使在获得新客户端之前它也不会终止?
Single io_service
在单个线程中运行可以为项目中的所有 asio 对象提供服务。在这样的设计中,I/O 仍然是“并行”的,因为它是非阻塞、异步的;但是由于io_service::run()
如果正在一个线程中运行,则所有完成处理程序都将被串行地、一一地调用。
要在多个 CPU 上扩展网络模块,您可以使用以下两种方法之一:每核线程、每核 io_service - 请参阅HTTPServer2 和 HTTPServer3 示例.
在任何情况下,创建一个线程或io_service
per TCPSession
在我看来这是不必要的开销 - 想象一下你有数千个的情况TCPSession
s...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)