当前位置:  开发笔记 > 运维 > 正文

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

如何解决《WindowsServer2003中的最大线程数是多少?》经验,为你挑选了3个好方法。

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



1> ShuggyCoUk..:

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

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

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

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

作为一个粗略的指南:

创造数十几乎肯定是有效的

数百个可能在当前的服务器和桌面硬件上,但有风险

成千上万肯定会失败.

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



2> Rex M..:

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

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


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

3> TheSoftwareJ..:

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

你所发生的"更重要的问题"的答案是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());
    }

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有