进程在Windows中可以拥有的最大线程数是多少

Cod*_*der 14 c++ multithreading

在Windows进程中,一次使用的线程有任何限制.如果是这样,每个进程可以使用的最大线程数是多少?

rod*_*igo 10

我知道没有限制,但有两个实际限制:

  1. 堆栈的虚拟空间.例如,在32位中,该过程的虚拟空间是4GB,但是只有大约2G可用于一般用途.默认情况下,每个线程将保留1MB的堆栈空间,因此最高值为2000个线程.当然,你可以改变堆栈的大小,使之降低使更多的线程将适合(参数dwStackSizeCreateThread或选项/STACK的链接器命令).如果使用64位系统,则此限制几乎消失.
  2. 调度程序开销.一旦你阅读了数千个线程,只需安排它们就会占用近100%的CPU时间,所以无论如何它们都是无用的.这不是一个硬限制,只是你创建的线程越多,程序就会越来越慢.

  • 好吧,取决于线程状态.6000个被阻止的线程对我的机器操作没有任何影响.此外,我无法看到,即使线程已准备好/正在运行,如果我有16个线程或1600个线程也会很重要 - 在任何一种情况下,我的4/8核心都会被最大化. (3认同)

Mat*_*son 7

实际限制是由可用内存量以多种方式确定的。Windows 中没有“不能拥有超过这么多”的线程或进程的限制,但是系统内可以使用的内存量是有限制的,当内存用完时,您就无法创建更多的内存。线程。

请参阅 Mark Russinovich 的博客: http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

  • 存档链接(原为404):https://web.archive.org/web/20121117072019/http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx (4认同)