【.NET Core】多线程之线程池(ThreadPool)详解(二)
在上一篇《【.NET Core】多线程之线程池(ThreadPool)详解(一)》中我们详细讲解了,线程池概念,如何应用及其应用的场景。本文我们将着重讲解线程池的使用。
一、线程池原理
CLR线程池并不会在CLR
初始化时立即建立线程,而是在应用程序要创建线程来运行任务时,线程池才初始化一个线程。线程池初始化时是没有线程的,线程池里的线程的初始化与其他线程一样,但是在完成任务以后,该线程不会自行销毁,而是以挂起的状态返回到线程池。直到应用程序再次向线程池发出请求时,线程池里挂起的线程就会再度激活执行任务。
这样既节省建立线程所造成的性能损耗,也可以让多个任务反复重用同一线程,从而在应用程序生存期内节约大量开销。
通过CLR线程池所建立的线程总是默认为后台线程,优先级数为ThreadPriotity.Normal
。
CLR线程池分为工作者线程(WorkerThreads)与I/O线程(CompletionPortThreads)两种:
工作者线程是主要用作管理CLR内部对象的运作,通常用于计算密集的任务。
I/O(Input/Output)线程主要用于与外部对象的运作,通常用于计算密集的任务。
二、通过ThreadPool.QueueUserWorkItem()
方法创建线程池
const int cycleNum = 15;
static void Main(strin