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



我在boost::asio方面没有太多经验。我有一些非常基本的问题。

我是否需要在不同的thread下使用不同的io_service和不同的socket,但只有一个acceptor,才能在线程服务器中处理客户端?

我相信我必须为新客户端使用不同的套接字。但是,如果所有线程都使用相同的io_service它会是并行的吗?

我正在经历 asio 部分的 http://en.highscore.de/cpp/boost/index.html这说明我需要在不同的线程中使用不同的io_services才能实现并行化。

我是否打算创建一个服务器类,每次在 acceptor.async_accept
中出现新客户端时创建一个new TCPsessionTCPSession CTOR 创建一个io_service和一个thread并在自己的线程中运行该io_service.run()会是一个好的设计吗?

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

在单个线程中运行的单个io_service可以为项目中的所有 asio 对象提供服务。在这样的设计中,I/O 仍然是"并行"的,因为它是非阻塞的、异步的;但由于io_service::run()在一个线程中运行,因此所有完成处理程序都将逐个串行调用。

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

无论如何,在我看来,为每个TCPSession创建一个线程或io_service似乎是不必要的开销 - 想想你有数千个TCPSession的情况......

最新更新