c++ 当使用带有executor参数的重载时,boost::asio的post和dispatch有什么区别?

332nm8kg  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(130)

我看到了几个问题,比如this,当只传递handler时,关于post vs dispatch的问题,handler被发布在相关的执行器上。我理解当当前执行在相关的执行器上执行时,dispatch可以调用handler的同步调用,而无需排队。我原以为同样的原理也适用于second overload,但在文档中特别指出The function object is queued for execution, and is never called from the current thread prior to returning from dispatch()
那么,在这种情况下,邮递和派送有什么区别呢?

hfwmuf9z

hfwmuf9z1#

您正在链接到旧文档。
此外,即使在那个版本中,非执行器重载的文档也说了完全相同的事情,所以所谓的差异并不存在。
我认为这是文档中的一个疏忽¹,即使在那时,current versions也明确表示可以在返回之前调用处理程序:
函数对象可以在从dispatch()返回之前从当前线程调用

旁注

我想指出的是,即使在从dispatch本身返回之前没有调用调用,调用仍然可以被优化,因为

  • 处理程序可以被推送到本地队列,并且在从当前执行的处理程序返回之后立即被执行。对于分配/解除分配排序模式,这实际上可能是更好的
  • 处理程序可以具有用于立即执行的关联执行器。这是一个新功能

2019 - 07 - 19 01:01:02 01:03 01:03 01:03 01:03 01:03 01:03 01:03 01:03 01:03 01:03 01:03 01:03 01 02:03 02 02:03 03 02:04 03 02:03 03 03 04:04 03 04:05 04 05 05:05 05 05 05:05 05 05 05 05:05 05 05 05 05 05:05 05 05 05 05:05 05 05 05 05:05 05 05 05 05:05

相关问题