23

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

4

2 回答 2

19

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

  1. 堆栈的虚拟空间。例如,在 32 位中,进程的虚拟空间为 4GB,但只有大约 2G 可用于一般用途。默认情况下每个线程将保留 1MB 的堆栈空间,因此最高值为 2000 个线程。当然,您可以更改堆栈的大小并使其更低,以便可以容纳更多线程(链接器命令中的参数dwStackSizeCreateThread选项/STACK)。如果您使用 64 位系统,此限制实际上会消失。
  2. 调度程序开销。一旦你读取了数千个线程,仅仅调度它们就会消耗你近 100% 的 CPU 时间,所以无论如何它们大多是无用的。这不是硬性限制,只是您创建的线程越多,您的程序就会越来越慢。
于 2013-05-23T10:04:23.897 回答
4

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

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

于 2013-05-23T10:04:29.990 回答