Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个C++;应用程序创建 我想知道,C++应用程序最多可以创建多少线程。 OS、硬件上限和其他因素对这些界限有影响吗?基本上,在C++ >强>应用层< /强>下有“强>无限制< /强>”。最大线程数更多地取决于操作系统级别(取决于您的体系结构和可用内存)_C++ - Fatal编程技术网

一个C++;应用程序创建 我想知道,C++应用程序最多可以创建多少线程。 OS、硬件上限和其他因素对这些界限有影响吗?基本上,在C++ >强>应用层< /强>下有“强>无限制< /强>”。最大线程数更多地取决于操作系统级别(取决于您的体系结构和可用内存)

一个C++;应用程序创建 我想知道,C++应用程序最多可以创建多少线程。 OS、硬件上限和其他因素对这些界限有影响吗?基本上,在C++ >强>应用层< /强>下有“强>无限制< /强>”。最大线程数更多地取决于操作系统级别(取决于您的体系结构和可用内存),c++,C++,在Linux上,每个进程的最大线程数没有限制。线程的数量在系统范围内是有限的。您可以通过执行以下操作来检查允许的最大线程数: cat /proc/sys/kernel/threads-max 在Windows上您可以使用该工具检查最大线程数: 在Mac OS上,请阅读以根据硬件配置查找线程数 但是,请记住,您使用的是多任务系统同时执行的线程数受可用处理器内核总数的限制。为了做更多的事情,系统尝试在所有这些线程之间切换。每个“开关”都有一个性能(几毫秒)。如果您的系统“切换”太多,它将不会加快

在Linux上,每个进程的最大线程数没有限制。线程的数量在系统范围内是有限的。您可以通过执行以下操作来检查允许的最大线程数:

cat /proc/sys/kernel/threads-max
在Windows上您可以使用该工具检查最大线程数:

在Mac OS上,请阅读以根据硬件配置查找线程数


但是,请记住,您使用的是多任务系统同时执行的线程数受可用处理器内核总数的限制。为了做更多的事情,系统尝试在所有这些线程之间切换。每个“开关”都有一个性能(几毫秒)。如果您的系统“切换”太多,它将不会加快太多的“工作”时间,您的整个系统将变慢。

除了线程比内核多这一普遍的不切实际之外,是的,还有一些限制。例如,系统可能为每个线程保留一个唯一的“进程ID”,并且可能只有65535个可用。此外,每个线程都有自己的堆栈,这些堆栈最终会消耗太多内存(但是,在生成线程时,可以调整每个堆栈的大小)


这是一篇信息性的文章——忽略了它提到Windows的事实,因为概念在其他常见系统上是类似的:

C++中没有限制线程数的东西。然而,操作系统肯定会有一个硬限制

线程过多会降低应用程序的吞吐量,因此建议使用线程池

<> >代码> [C++ 11:1.10/1 ]:[.]在托管实现下,C++程序可以有多个线程同时运行。[…]在独立实现下,实现定义了一个程序是否可以有多个执行线程

[C++11:30.3/1]:
30.3描述了可用于创建和管理线程的组件。[注意:这些线程旨在与操作系统线程一一对应。-结束注意]

因此,基本上,这完全取决于实现&OS;C++不在乎!p>
它甚至没有在附录B“实施数量”中列出建议!(实际上,这看起来像是一个省略)。

C++语言没有指定最大值(甚至超过一个最小值)。特定的实现可以,但我从未看到它直接完成。操作系统也可以,但通常只是声明一个受系统资源限制的lank。每个线程都会使用一些非分页内存、选择器表和其他绑定的内容,因此您可能会用完这些内容。如果不这样做,那么如果线程实际工作,系统将变得非常无响应


从另一个角度看,真正的并行性受到系统中实际内核的限制,您不应该有太多线程。逻辑上可能产生成百上千个线程的应用程序通常出于良好的实际原因开始使用线程池。

通常,线程数量的限制是可用的内存量,但也有一些系统具有较低的限制

除非你疯狂地创建线程,否则它不太可能有限制。创建更多的线程很少是有益的,一旦达到某个数字,这个数字可能与内核的数量差不多,或者比内核的数量高出几倍(对于真正的大型、重型硬件来说,现在可能只有几百个,有16个内核处理器和8个插槽)

CPU限制的线程不应该超过处理器的数量——这没有什么好处

执行I/O或其他“坐在那里等待”的线程数量可能会更多—每个处理器核心2-5个线程似乎是合理的。考虑到现代机器在高端有8个插槽和16个内核,这仍然只有大约1000个线程

当然,可以设计一个Web服务器系统,其中每个连接都是一个线程,并且该系统在任何给定时间都有10k或20k个连接处于活动状态。但这可能不是最有效的

我想知道,C++应用程序最多可以创建多少线程。 实现/操作系统相关

<>记住C++前面没有C++的线程。< /P> 操作系统、硬件上限和其他因素是否会影响这些界限

操作系统可能会限制进程可以创建的线程数。
操作系统可以限制同时运行的线程总数(为了防止分叉炸弹等,linux肯定可以做到这一点)。
如果每个线程分配自己的堆栈,可用的物理(和虚拟)内存将限制您可以创建的线程数。
操作系统可以提供的线程“句柄”数量可能有限制(可能是硬编码的)。

底层操作系统/平台可能根本没有线程(DOS/FreeDOS的实模式编译器或类似的东西)

是的,一般来说,时间和空间限制了线程的数量。目前,这个问题太广泛,任何人都无法给出有用的答案。你能解释一下为什么你需要知道这些信息吗?你为什么要考虑创建大量线程?在Hell++中,编译过程中会生成一个随机数,这是该程序允许的最大线程数。@Damon:但那里不需要线程,对吗?@AswinMurugesh:当然不需要,我很讽刺,因为这是一个“最大可能的线程数是多少?”[我只合理地需要5或6个]“类型的