我很难找到使用boost::asio::io_service
构建的线程池的确切行为。
多个线程可以调用
run()
函数来设置池 io_service可以从中执行处理程序的线程。 所有主题 在池中等待的是等效的,io_service可能 选择其中任何一个来调用处理程序。
我想,当执行run()
的线程正在执行处理程序时,它们会执行它,然后返回等待下一个处理程序执行。执行处理程序时,不会将线程视为等待,因此不会为其分配新的执行处理程序。那是对的吗?或者io_service
是否为线程分配工作,而不考虑这些是否繁忙?
我问,因为在我们正在使用的一个项目(OSRM)中,使用基于boost::asio::io_service
的线程池来处理传入的HTTP请求,我注意到长时间运行的请求,有时阻止其他快速请求,即使有更多线程和核心可用。
答案 0 :(得分:0)
执行处理程序时,不会将线程视为等待,因此不会为其分配新的处理程序。那是对的吗?
是。它是一个拉模型队列。
值得注意的"明显"例外情况是使用股线时:包裹在股线上的处理程序与在同一股线上运行的其他处理程序同步。