在同一个io_service对象上增强异步套接字和线程池

时间:2015-03-15 12:39:32

标签: c++ multithreading sockets boost boost-asio

我正在编写服务器应用程序。

  • 对于多线程我使用类似于this one的线程池。
  • 在网络接口中,我使用带有异步操作的套接字。
  • 所有套接字和线程池都使用相同的io_service对象。

我的问题是对多个套接字执行async_read操作会“阻塞”来自线程池的线程,还是会启动其他线程,或者它们都没有?

1 个答案:

答案 0 :(得分:3)

都不是。每个async_read操作最初由调用它的线程处理。如果在没有套接字就绪的情况下无法进行前进(因为另一方需要发送或接收某些内容),则异步操作将返回到调用线程。套接字就绪由“reactor”监控,“reactor”是boost的内部部分,它使用每个平台支持的最有效机制监视套接字是否准备就绪。当套接字就绪并且操作可以向前进行时,将“组合操作”分派给I / O服务以继续操作。操作完成后,完成它的线程将调用完成处理程序。