不均匀加载期间boost :: asio :: io_service线程池的行为

时间:2017-09-13 13:53:55

标签: c++ boost-asio

我很难找到使用boost::asio::io_service构建的线程池的确切行为。

documentation说:

  

多个线程可以调用run()函数来设置池   io_service可以从中执行处理程序的线程。 所有主题   在池中等待的是等效的,io_service可能   选择其中任何一个来调用处理程序。

我想,当执行run()的线程正在执行处理程序时,它们会执行它,然后返回等待下一个处理程序执行。执行处理程序时,不会将线程视为等待,因此不会为其分配新的执行处理程序。那是对的吗?或者io_service是否为线程分配工作,而不考虑这些是否繁忙?

我问,因为在我们正在使用的一个项目(OSRM)中,使用基于boost::asio::io_service的线程池来处理传入的HTTP请求,我注意到长时间运行的请求,有时阻止其他快速请求,即使有更多线程和核心可用。

1 个答案:

答案 0 :(得分:0)

  

执行处理程序时,不会将线程视为等待,因此不会为其分配新的处理程序。那是对的吗?

是。它是一个拉模型队列。

值得注意的"明显"例外情况是使用股线时:包裹在股线上的处理程序与在同一股线上运行的其他处理程序同步。