boost::asio::strand与boost::asio::io_context::strand的区别是什么
二者的核心区别是Boost.Asio版本迭代带来的接口差异,功能完全等价
boost::asio::io_context::strand是Boost 1.66版本之前的旧API,是io_context专属的嵌套类型,仅支持绑定io_context的执行上下文,泛用性差。boost::asio::strand<Executor>是Boost 1.66版本重构执行器模型后推出的通用泛型strand实现,支持任意符合Asio执行器规范的类型作为模板参数,除了io_context::executor_type之外,还可以适配SSL流、自定义执行器等多种场景,泛用性更强。
在Boost 1.66及之后的版本中,boost::asio::io_context::strand 已经被定义为boost::asio::strand<boost::asio::io_context::executor_type>的别名,二者底层实现完全一致,post()、dispatch()等常用接口完全兼容,运行性能没有任何差异,你用来做HTTP POST请求串行化的场景下,任选其一都可以实现避免重叠写入的需求。
使用建议
- 如果你的项目需要兼容Boost 1.66之前的旧版本,选择
boost::asio::io_context::strand即可 - 如果是使用较新版本Boost的新项目,优先选择泛型
boost::asio::strand<Executor>写法,后续调整执行上下文时不需要修改strand类型,适配性更好。
内容的提问来源于stack exchange,提问作者Zohar81
相关产品推荐
相关产品推荐

