使用strand::post 和io_service::post 与strand::wrap 之间究竟有什么区别?

0xb*_*00d 5 boost boost-asio

根据我的理解,将处理程序发布到strand对象意味着:

  • 一次只执行一个已发布的处理程序。
  • 处理程序按顺序调用。

将处理程序直接发布到io_service对象并将它们包装起来strand::wrap也意味着一次只执行一个已发布的处理程序,但不是按顺序执行的。

还有其他区别吗?以及如何使用 并行(在不同线程中)运行两种(或更多)不同类型的工作(因此,不同的处理程序/函数)strand

Oli*_*r K 1

如果您希望它们并行运行,请不要使用支架。链用于序列化。只需发布到服务并让服务在线程池中运行。

但你提出了一个很好的观点,我希望有人能回答。到底有什么区别呢?如果wrap 序列化所有处理程序,那么它们怎么会乱序,即看起来它与通过strand 进行发布的作用相同?你会在哪里使用其中一种而不是另一种?