C++ 在c+中使用boost可以生成多少线程+;?
当我尝试产卵太多时会发生什么 当我生成超过900个线程时,出现以下错误:C++ 在c+中使用boost可以生成多少线程+;?,c++,multithreading,boost,concurrency,C++,Multithreading,Boost,Concurrency,当我尝试产卵太多时会发生什么 当我生成超过900个线程时,出现以下错误: terminate called after throwing an instance of 'dining 1 boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::thread_resource_error> >dining 3 ' dining 2 what():
terminate called after throwing an instance of 'dining 1
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::thread_resource_error>
>dining 3
'
dining 2
what(): dining 4
boost::thread_resource_errordining 3
terminate在抛出“1”的实例后调用
boost::异常\详细信息::克隆\ 3
'
餐饮2
吃什么
boost::线程资源错误3
这是由于尝试生成太多线程而导致的预期错误吗?可以生成多少线程取决于操作环境的限制。是的,
boost::thread\u resource\u error
是您在无法获得所需的适当线程资源时应该想到的,请记住,每个线程都需要保留堆栈空间。这就是为什么对可以生成的线程数量有限制的原因。看起来你要么正在达到这个极限,要么boost阻止你达到这个极限
这里有一个指向最新boost文档的链接,该文档记录了您看到的行为(引发的异常):(在该页面上搜索boost::thread\u resource\u error)存在操作系统限制。这主要取决于您的系统上有多少内存。如果我没有记错的话,每个pthread线程至少有32兆的内存。默认值要多得多。您正达到一个硬限制。正如其他人所说,可能存在两个限制:
- 进程可以产生的线程数量受操作系统的限制(全局或每个进程)
- 可用内存有限,每个线程保留自己的堆栈(通常为几MB,4 MB*900-->3.6 Go)
- 了解如何减少每个线程分配的堆栈空间(注意堆栈溢出)
- 切换到Go,或找到另一种实现例程的语言