Windows Server 2003中的最大线程数是多少?

Dou*_*son 30 windows multithreading

有人知道吗?更大的问题是当你遇到这个最大值时会发生什么?这与其他Windows操作系统(如Vista,XP等)的数量是否相同?

Shu*_*oUk 35

首先,我建议阅读这篇文章:http: //blogs.msdn.com/oldnewthing/archive/2007/03/01/1775759.aspx

然后http://blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx

总而言之,限制通常是堆栈空间(必须在连续的块中),并且由于每个线程都消耗了这些分散的空间,因此很快就会耗尽连续的块.在64位机器和操作系统上,这不是一个问题.

缓解策略存在,但只会到目前为止(依赖于你不使用每个线程多的堆栈)

作为一个粗略的指南:

  • 创造数十几乎肯定是有效的
  • 数百个可能在当前的服务器和桌面硬件上,但有风险
  • 成千上万肯定会失败.

你可能不应该总有需要创造超过十(如果你真的需要你应该已经知道这个信息)


Rex*_*x M 25

我在提出这些问题时听到的最佳答案是:

这没关系,如果你发现它确实重要,你需要重新思考你正在做的事情,这无关紧要.

  • 当数以百计的小虫子漂浮在周围时,Bravo,线程变得弄巧成拙(并且效率低下).使用线程池,你不必担心. (6认同)

The*_*edi 15

请注意,如果您担心达到此限制,则应仔细检查您的设计!!!!!!!!

你所发生的"更重要的问题"的答案是OutOfMemoryException.

不完全是一个直接的答案,但这里有一些代码来找出限制.但它可能依赖于内存.有兴趣看到其他OS/cpu/mem结果.

您可以随意编辑和添加您的机器:

  • Windows 7,VS2008,双核,2gb内存:1,465然后崩溃与OutOfMemoryException

        int i = 0;
        try
        {
            while (true)
            {
                new Thread(new ThreadStart(() => Thread.Sleep(int.MaxValue))).Start();
                i++;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(i);
            Console.WriteLine(ex.ToString());
        }
    
    Run Code Online (Sandbox Code Playgroud)