boost::asio内部线程

boost::asio internal threads

本文关键字:线程 内部 asio boost      更新时间:2023-10-16

当使用boost::asio进行异步TCP通信时,我注意到它启动了很多(3-4)内部线程。在阅读文件时,上面写着

"The implementation of this library for a particular platform may 
 make use of one or more internal threads to emulate asynchronicity"

现在,我的lib有非常严格的要求,不能启动任何额外的线程(除了客户端提供的、现在启动io_service::run()的线程)。有什么方法可以阻止boost::asio创建这些额外的线程吗?

或者,有没有其他异步库可以只在一个线程中运行?

您可以通过在适当的转换单元中定义BOOST_ASIO_DISABLE_THREADS来禁用模拟异步操作支持。文件中有关于定义的说明

显式禁用Boost.Asio的线程支持,与Boost作为一个整体是否支持无关螺纹。

如果您没有找到特定于平台的实现说明,它会清楚地说明哪些操作使用此模拟。例如,我知道在几乎每个平台上,async_resolve()都是以这种方式模拟的,线程是在第一次调用async_resolve()时创建的。某些(全部?)Windows平台模拟其他几种操作,如deadline_timer操作。

禁用线程支持的一个替代方案可能是避免这些模拟操作。我个人没有在项目中使用过BOOST_ASIO_DISABLE_THREADS,所以我不确定它是否有其他副作用。

您是否真的测试过它,看看线程是否在您的特定平台上生成?如果没有,问题就解决了!如果有的话,您可能会考虑使用不同的库,比如libevent或libev。其中任何一个,或者Qt等各种库提供的一大堆其他异步事件循环,都可以工作。