我们可以在.NET应用程序中创建的线程数量是否有限制?
我假设可以创建的线程数受限于可用内存量,因为需要分配线程的堆栈。如果我错了,请纠正我。还有其他限制线程数的因素吗?或者,线程数是否限制为特定数量?
如果我知道机器规格,我怎样(粗略地)计算机器上可以创建的最大线程数?
答案 0 :(得分:3)
与往常一样,Raymond Chen在his blog上有答案。请注意,他的测试似乎是使用非托管代码运行的。我的猜测是,.NET框架中没有任何内容实际上限制了每个进程的线程数,并且该限制将由O / S强制执行。如果确实如此,那么他的测试仍然有效。
另外,我不确定32位和64位机器之间是否存在差异,我认为他的结果取决于RAM大小和32位/ 64位CPU以及可能的CPU数量。总而言之,看起来他能够创建13000个线程。
运行13k线程的一个大问题是花费context switching的时间肯定会占用所有可用的cpu,而且你很可能没有完成任务。
如果您正在研究的应用程序正在创建大量应该执行紧张工作的线程,那么您可能无法像处理上下文切换量的问题一样停止进程。显然,多线程应用程序中最常见的问题是资源死锁,但有许多工具可用于对该场景进行故障排除。
尝试以下有关死锁的链接,以确定这是否是您实际遇到的内容: