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

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

首先我会build议阅读: http : //blogs.msdn.com/oldnewthing/archive/2007/03/01/1775759.aspx

那么http://blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx

总而言之,限制通常是堆栈空间(它们必须位于连续的块中),而且由于每个线程都消耗了这些散布的资源,所以快速耗尽了连续的块。 在64位机器和操作系统上,这个问题就less得多了。

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

作为一个粗略的指导:

  • 创造十几乎是肯定的工作
  • 目前的服务器和桌面硬件上可能有数百个,但风险很大
  • 成千上万的人肯定会失败。

无论如何,你可能不需要创build超过十个(如果你真的需要你,应该知道这些信息)

我在提问时听到的最好的答案是:

没关系,如果你觉得这很重要,你需要重新思考你在做什么,这样做没有关系。

请注意,如果您担心触及此限制,您应该仔细检查您的devise!!!!!!!!

发生什么事的“更重要的问题”的答案是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()); } 

据我所知,整个线程模型从Win2K以来应该不会有太大的改变。

线程本身并没有真正的限制,但更多的是进程栈空间的限制。 有关这方面的更多详细信息,请参阅Raymond Chen 的线程限制的深入说明 。

请阅读ShuggyCoUk的回答指出的Raymond Chen博客文章。

但要特别注意这一点:

但是每当有人问:“一个进程可以创build的最大线程数是多less? 是“为什么你创造这么多的线程,这甚至成为一个问题?”

众所周知,“每个客户端一个线程”模式不会超过十几个客户端。 如果您要同时处理多个客户端,则应该转而使用模型,而不是将线程专用于客户端,而是分配一个对象。 (有一天我会思考线程和对象之间的双重性)Windows提供I / O完成端口和线程池,以帮助您从基于线程的模型转换为基于工作项的模型。

如果您坚持使用大量线程并需要扩展的现有devise,您可能还会考虑使用光纤:

http://msdn.microsoft.com/en-us/library/ms682661%28v=vs.85%29.aspx

它可以为您节省一个重新devise。

Indy认为它是Indy 10,但它从来没有发生,因为.NET冒险大部分时间都是消耗的。

我猜测它不是线程的数量,但内存使用是限制因素。

问题似乎很古老,但也想增加对其他人的帮助:

本文关于:推动Windows的限制:进程和线程

http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx

默认堆栈大小为1MB,在32位Windows操作系统下分配给Windows进程的用户模式地址空间大约为2GB。 每个进程允许大约2000个线程(2000 * 1MB = 2GB)。 对于64位,实际上不存在这样的问题。