有人知道吗?更大的问题是当你遇到这个最大值时会发生什么?这与其他Windows操作系统(如Vista,XP等)的数量是否相同?
首先,我建议阅读这篇文章:http: //blogs.msdn.com/oldnewthing/archive/2007/03/01/1775759.aspx
然后http://blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
总而言之,限制通常是堆栈空间(必须在连续的块中),并且由于每个线程都消耗了这些分散的空间,因此很快就会耗尽连续的块.在64位机器和操作系统上,这不是一个问题.
缓解策略存在,但只会到目前为止(依赖于你不使用每个线程多的堆栈)
作为一个粗略的指南:
创造数十几乎肯定是有效的
数百个可能在当前的服务器和桌面硬件上,但有风险
成千上万肯定会失败.
你可能不应该总有需要创造超过十(如果你真的做需要你应该已经知道这个信息)
我在提出这些问题时听到的最佳答案是:
这没关系,如果你发现它确实重要,你需要重新思考你正在做的事情,这无关紧要.
请注意,如果您担心达到此限制,则应仔细检查您的设计!!!!!!!!
你所发生的"更重要的问题"的答案是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()); }