【问题标题】:Boost async sockets and thread pool on same io_service object在同一个 io_service 对象上提升异步套接字和线程池
【发布时间】:2015-03-15 12:39:32
【问题描述】:

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

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

我的问题是在多个套接字上执行async_read 操作“阻塞”线程池中的一个线程,还是它们启动了额外的线程,或者两者都不启动?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-15
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多