C# 有哪些线程池自动根据cpu负荷运行任务 请给出示例的代码
在 C# 中,有两种线程池:默认线程池和自定义线程池。
- 默认线程池示例代码:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
// 启动多个任务
for (int i = 0; i < 10; i++)
{
Task.Run(() =>
{
Console.WriteLine($"任务 {Task.CurrentId} 开始执行");
Thread.Sleep(1000);
Console.WriteLine($"任务 {Task.CurrentId} 执行完成");
});
}
Console.ReadLine();
}
}
上述代码中,通过 Task.Run 方法启动了 10 个任务,这些任务会被自动分配到默认线程池中运行。默认线程池会根据当前 CPU 负荷自动调整运行任务的线程数。
- 自定义线程池示例代码:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
// 创建自定义线程池
ThreadPool.SetMinThreads(2, 2);
ThreadPool.SetMaxThreads(10, 10);
// 启动多个任务
for (int i = 0; i < 10; i++)
{
ThreadPool.QueueUserWorkItem(state =>
{
Console.WriteLine($"任务 {Thread.CurrentThread.ManagedThreadId} 开始执行");
Thread.Sleep(1000);
Console.WriteLine($"任务 {Thread.CurrentThread.ManagedThreadId} 执行完成");
});
}
Console.ReadLine();
}
}
上述代码中,通过 ThreadPool.SetMinThreads 和 ThreadPool.SetMaxThreads 方法设置了自定义线程池的最小和最大线程数。然后,通过 ThreadPool.QueueUserWorkItem 方法启动了 10 个任务,这些任务会被自动分配到自定义线程池中运行。自定义线程池会根据最小和最大线程数以及当前 CPU 负荷自动调整运行任务的线程数
原文地址: https://www.cveoy.top/t/topic/eOCv 著作权归作者所有。请勿转载和采集!