0

对于选择使用线程池而不是创建自己的线程,我仍然有点困惑。

我知道创建自己的线程的性能问题(为我创建的每个线程创建、执行垃圾收集器收集),所以不需要提出这个问题

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

4

4 回答 4

0

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

于 2013-01-31T02:23:17.857 回答
0

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

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

于 2013-01-31T02:27:21.267 回答
0

如果系统将耗尽资源,线程池不会崩溃。线程池将等到下一个线程可用于运行您的请求(无论它可能是什么)。

但是要注意一个可以耗尽最大可用线程的代码是 99.5% 是写得不好或不正确。

于 2013-01-31T02:55:17.813 回答
0

看看QueueUserWorkItem。这里的关键字是'队列'。

排队执行的方法。该方法在线程池线程可用时执行。

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

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

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

于 2013-01-31T02:58:01.227 回答