boost::asio内部线程
boost::asio internal threads
当使用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等各种库提供的一大堆其他异步事件循环,都可以工作。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 如何在JNI中从线程内部调用JAVA方法
- cpp 为什么 boost::线程内部的循环不遍历所有值并且推送相同的值?
- std::vector::clear()ing 二维向量线程的内部向量安全吗?
- 如何在线程线程内部制作内存?
- 启用从程序内部取消 openmp 线程
- 在类中带有来自另一个类的成员函数的类内部线程
- 如何等待内部线程循环
- std::thread,在"this"上启动线程(从类本身内部)
- 在MFC中实现多线程,以更新外部函数可访问的内部字典
- Asio内部线程对用户透明吗?
- while循环中线程内部的另一个线程
- 是否可以选择从程序内部运行的线程数?c++
- 创建新线程时在lambda内部使用unique_ptr的线程安全性
- boost::asio内部线程