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

2023-11-23

我在这方面经验不多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在我看来这是不必要的开销 - 想象一下你有数千个的情况TCPSessions...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于具有单个接受器的线程 boost::asio 服务器,每个线程是否需要多个 io_service 的相关文章

随机推荐