9

我在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_serviceformain以便它在获得新 Client 之前不会终止?

4

1 回答 1

10

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

要在多个 CPU 上扩展网络模块,您可以使用以下两种方法之一:thread-per-core、io_service-per-core - 请参阅HTTPServer2 和 HTTPServer3 示例

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

于 2012-06-13T08:37:17.280 回答