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

本文关键字:线程 创建 自己的 资源 何不会 主机 崩溃 | 更新日期: 2023-09-27 17:56:50

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

我知道创建自己的线程(

为我创建的每个线程创建,执行垃圾收集器)的性能问题,因此无需提出此问题

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

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

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

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

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

如果

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

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

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

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

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

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

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