在 boost::asio 中发布和调度有什么区别?

What is the difference between post and dispatch in boost::asio?

本文关键字:调度 什么 区别 boost asio      更新时间:2023-10-16

我正在尝试使用boost:asio库来创建线程池。官方文件说:

dispatch :请求io_service调用给定的处理程序。

post:请求io_service调用给定的处理程序并立即返回。

有人可以解释一下这两者有何不同吗?

区别在于dispatch可以在它内部运行handler(传递给它的CompletionHandler(,这意味着您将等待它完成,如果它完成,在函数返回之前。 另一方面,post不会自行运行handler并立即返回到呼叫站点。

因此,dispatch是潜在的阻塞调用,而post是非阻塞调用。

>Post确保调用 post 的线程不会立即尝试处理任务。

https://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/reference/io_service/post.html

但不允许io_service从内部调用处理程序 此函数。

Dispatch 不作这样的承诺;并且可以在函数返回时完成。