我仍然对选择使用线程池而不是创建我自己的线程感到困惑。
我意识到创建自己的线程的性能问题(为我创建的每个线程创建,执行垃圾收集器收集),所以不需要提起它
关键是,如果我使用线程池抽象创建线程的数量,(我没有定义线程限制),CLR如何知道多少就足够了?
答案 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"));