boost :: asio内部线程

当使用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这样的各种库提供的一大堆其他异步事件循环都可以工作。

链接地址: http://www.djcxy.com/p/62677.html

上一篇: boost::asio internal threads

下一篇: connect success after close