在同一个 io_service 对象上提升异步套接字和线程池
Boost async sockets and thread pool on same io_service object
我正在编写服务器应用程序。
- 对于多线程,我使用类似于 this one 的线程池。
- 在网络接口中,我使用带有异步操作的套接字。
- 所有套接字和线程池使用相同的io_service对象。
我的问题是在多个套接字上执行 async_read
操作 "block" 来自线程池的线程,或者它们是否启动额外的线程,或者两者都不启动?
都没有。每个 async_read
操作最初都由调用它的线程处理。如果在套接字未就绪的情况下无法进行转发(因为另一方需要发送或接收某些内容),则异步操作 returns 到调用线程。套接字准备情况由 "reactor" 监控,boost 的内部部分使用每个平台支持的最有效机制监控套接字准备情况。当套接字准备就绪并且操作可以向前推进时,"composed operation" 被分派到 I/O 服务以继续操作。当操作完成时,完成它的线程调用完成处理程序。
我正在编写服务器应用程序。
- 对于多线程,我使用类似于 this one 的线程池。
- 在网络接口中,我使用带有异步操作的套接字。
- 所有套接字和线程池使用相同的io_service对象。
我的问题是在多个套接字上执行 async_read
操作 "block" 来自线程池的线程,或者它们是否启动额外的线程,或者两者都不启动?
都没有。每个 async_read
操作最初都由调用它的线程处理。如果在套接字未就绪的情况下无法进行转发(因为另一方需要发送或接收某些内容),则异步操作 returns 到调用线程。套接字准备情况由 "reactor" 监控,boost 的内部部分使用每个平台支持的最有效机制监控套接字准备情况。当套接字准备就绪并且操作可以向前推进时,"composed operation" 被分派到 I/O 服务以继续操作。当操作完成时,完成它的线程调用完成处理程序。