C# 对于.NET进程中可以存在的线程数是否有硬限制?

C# 对于.NET进程中可以存在的线程数是否有硬限制?,c#,process,clr,multithreading,C#,Process,Clr,Multithreading,可能重复: 我们可以在.NET应用程序中创建的线程数量有限制吗 我假设可以创建的线程数量受到可用内存量的限制,因为需要分配线程堆栈。如果我错了,请纠正我。是否有其他因素限制线程数?或者,线程的数量是否限制为特定的数量 如果我知道机器的规格,我如何(粗略地)计算机器上可以创建的最大线程数?一如既往,Raymond Chen有答案。请注意,他的测试似乎是使用非托管代码运行的。我的猜测是,在.NET framework中没有任何东西实际限制每个进程的线程数,并且该限制将由O/s强制执行。如果确实如此

可能重复:

我们可以在.NET应用程序中创建的线程数量有限制吗

我假设可以创建的线程数量受到可用内存量的限制,因为需要分配线程堆栈。如果我错了,请纠正我。是否有其他因素限制线程数?或者,线程的数量是否限制为特定的数量


如果我知道机器的规格,我如何(粗略地)计算机器上可以创建的最大线程数?

一如既往,Raymond Chen有答案。请注意,他的测试似乎是使用非托管代码运行的。我的猜测是,在.NET framework中没有任何东西实际限制每个进程的线程数,并且该限制将由O/s强制执行。如果确实如此,那么他的测试仍然有效

此外,我不确定32位和64位机器之间是否有差异,我认为他的结果取决于RAM大小、32位/64位CPU以及可能的CPU数量。综上所述,看起来他能够创建13000个线程

运行13k线程的一个大问题是,所花费的时间肯定会消耗掉所有可用的cpu,并且很可能很少甚至没有完成任何工作

如果您正在研究的应用程序正在创建大量本应进行高强度工作的线程,那么您可能不会遇到进程挂起,而会遇到大量上下文切换问题。显然,多线程应用程序中最常见的问题是资源死锁,但是有许多工具可用于解决该情况

请尝试以下有关死锁的链接,以确定您是否实际遇到了死锁:


注意:我之所以问这个问题,是因为我正在调查涉及大量线程的应用程序挂起。我不打算故意创建最大数量的线程。:-)这是的副本。听起来像是噩梦般的维护场景。没有什么问题比调试别人的大量(可能是不必要的)多线程代码中的并发性问题更困难了。谢谢,这个答案非常有用。