根据我的理解,将处理程序发布到strand
对象意味着:
直接将处理程序发布到io_service
对象并按strand::wrap
包装它们也意味着一次只执行一个已发布的处理程序,但不按顺序执行。
还有其他区别吗?如何使用strand
并行(在不同的线程中)运行两种(或更多种)不同类型的工作(因此,不同的处理程序/函数)?
答案 0 :(得分:1)
如果您希望它们并行运行,请不要使用支架。链用于序列化。只需发布到服务并让服务在线程池中运行。
但是你提出了一个很好的观点,我希望有人回答。到底是什么 区别?如果换行序列化所有处理程序,那么它们怎么会出现故障,即看起来像通过链发布一样?你会把哪一个用在另一个上面?
答案 1 :(得分:0)
事实上,strand
是一个队列,因此io_service
向wrap
发布一个处理程序与不包装相同,因为每次发布它时,都会在不同的温度下执行strand
(每个队列只包含一个处理程序 - 所有这些处理程序可以同时执行,因为它们不在同一个strand
中)。如果需要序列化处理程序,则它们必须由相同的strand
对象(因此包含多个处理程序)包装。