线程池介绍:
线程池的主要作用包括:
创建线程涉及到用户模式和内核模式的切换,内存分配,DLL通知等一系列过程,线程销毁的步骤也是开销很大的,所以如果应用程序使用完一个线程,我们能把线程暂时存放起来,以备下次使用,就可以减小这些开销。
所有进程使用一个共享的线程池,还是每个进程使用独立的线程池
线程池中线程的分类
工作线程(Compute-bound Threads):
ThreadPool.QueueUserWorkItem(state =>
{
// 工作线程的代码(计算密集型任务)
});
I/O线程(I/O-bound Threads):
需要注意的是,线程池中的线程可以同时执行工作线程和I/O线程的任务,具体的线程分类取决于任务的性质和执行方式。
常用的线程池的示例:
下面是一些常见的线程池使用的C#代码示例,包括使用ThreadPool类和Task类:
using System;
using System.Threading;
class Program
{
static void Main()
{
// 使用 ThreadPool.QueueUserWorkItem 启动线程池中的工作线程
ThreadPool.QueueUserWorkItem(state =>
{
Console.WriteLine("工作线程执行中...");
// 执行工作线程的代码
});
// 阻止主线程退出,以便查看工作线程的执行
Console.ReadLine();
}
}
使用 Task 类:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
// 使用 Task.Run 启动任务
Task.Run(() =>
{
Console.WriteLine("任务执行中...");
// 执行任务的代码
});
// 阻止主线程退出,以便查看任务的执行
Console.ReadLine();
}
}
使用 Task 类并等待任务完成:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
// 使用 Task.Run 启动异步任务,并使用 await 等待任务完成
await Task.Run(() =>
{
Console.WriteLine("异步任务执行中...");
// 执行异步任务的代码
});
// 主线程继续执行其他操作
Console.WriteLine("主线程继续执行...");
// 阻止主线程退出,以便查看任务的执行
Console.ReadLine();
}
}
.NET线程池有什么不足