我正在尝试使用boost:asio库来创建线程池。官方文件说:
dispatch:请求io_service调用给定的处理程序。
post:请求io_service调用给定的处理程序并立即返回。
有人可以解释这两者有何不同吗?
答案 0 :(得分:2)
Post
确保调用post的线程不会立即尝试处理任务。
https://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/reference/io_service/post.html
但不允许io_service从内部调用处理程序 这个功能。
派遣没有这样的承诺;并且可以在函数返回时完成。
答案 1 :(得分:2)
差异是dispatch
可以在其中运行handler
(传递给它的CompletionHandler
),这意味着你会在函数返回之前等待它完成,如果有的话。另一方面,post
本身不会运行handler
并立即返回呼叫站点。
因此,dispatch
是可能阻止的通话,而post
是非阻止通话。