【问题标题】:Number of events in boost::asio::io_service event loopboost::asio::io_service 事件循环中的事件数
【发布时间】:2014-07-27 03:12:06
【问题描述】:

是否可以知道 boost::asio::io_service 事件循环中未决事件的数量?我正在查看reference,但没有看到任何此类功能。

我正在寻找这样的功能来实现可动态调整大小的线程池。如果可用,可以使用挂起事件的数量来确定是否需要向池中添加更多线程。

【问题讨论】:

  • 至少在 Windows 上使用 IOCP 是不可能的(应该没有必要,请参阅 Anton 的回答)。

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


【解决方案1】:

假设 asio 和您的应用程序都已正确编写,因此唯一的阻塞操作是在事件调度循环内,为什么您需要比可用硬件资源更多的线程? IE。如果线程没有阻塞,那么超额订阅不会给您带来任何性能提升。

因此,您可以创建一个固定大小的线程池,或者只使用TBB 它将为您创建它来处理任务(虽然,TBB 尚不应该用于阻塞 IO,所以不要使用 TBB 任务来阻塞-等待)

【讨论】:

  • 我知道拥有比可用硬件资源更多的线程不会给我带来太多好处,这应该是我应该确定最大池大小的方式,但是如果线程不多的话,那么线程少又如何呢?如果需要,要处理的事件并逐渐将线程添加到最大数量?
  • 按需创建线程。 IE。当所有线程都忙于处理一个任务时,创建一个新的,直到达到限制
猜你喜欢
  • 1970-01-01
  • 2013-12-05
  • 2011-06-16
  • 2017-09-17
  • 2012-11-26
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
相关资源
最近更新 更多