使用strand :: post和io_service :: post与strand :: wrap之间的区别是什么?

时间:2011-09-30 13:52:17

标签: boost boost-asio

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

但是你提出了一个很好的观点,我希望有人回答。到底是什么 区别?如果换行序列化所有处理程序,那么它们怎么会出现故障,即看起来像通过链发布一样?你会把哪一个用在另一个上面?

答案 1 :(得分:0)

事实上,strand是一个队列,因此io_servicewrap发布一个处理程序与不包装相同,因为每次发布它时,都会在不同的温度下执行strand(每个队列只包含一个处理程序 - 所有这些处理程序可以同时执行,因为它们不在同一个strand中)。如果需要序列化处理程序,则它们必须由相同的strand对象(因此包含多个处理程序)包装。