如何使用线程池不会使主机资源崩溃而不是创建自己的线程?

时间:2013-01-31 02:18:34

标签: c# .net multithreading threadpool

我仍然对选择使用线程池而不是创建我自己的线程感到困惑。

我意识到创建自己的线程的性能问题(为我创建的每个线程创建,执行垃圾收集器收集),所以不需要提起它

关键是,如果我使用线程池抽象创建线程的数量,(我没有定义线程限制),CLR如何知道多少就足够了?

4 个答案:

答案 0 :(得分:0)

运行时有预定义数量的工作线程运行,我认为默认值为10.它会将您的工作请求排队,直到池中有一个未占用的线程。这是一个非常简单且相当安全的多线程模型,但您可能希望研究“异步/等待”,因为它可以利用多个并发模型和抽象技术。

答案 1 :(得分:0)

.NET运行时会根据内核数量和其他因素自动选择合理数量的最大线程数,但如果您有特殊需求,可以自己设置此数字。

http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

答案 2 :(得分:0)

如果系统耗尽资源,

线程池不会崩溃。线程池将等待下一个线程可用于运行您的请求(无论它是什么)。

然而,想要注意一个代码可以耗尽最大可用的线程99.5%写得不好​​或不正确。

答案 3 :(得分:0)

看看QueueUserWorkItem。此处的关键字为“队列”。

对执行方法进行排队。当线程池线程变为可用时,该方法执行。

ThreadPool提供了一个线程池,可用于执行任务,发布工作项,处理异步I / O,代表其他线程等待,以及处理计时器。

http://msdn.microsoft.com/en-us/library/system.threading.threadpool.queueuserworkitem.aspx

ie:ThreadPool.QueueUserWorkItem((i)=> Console.WriteLine("Hello"));