多线程实现与对比

以下展示三种常见的多线程实现方式:Thread类、ThreadPoolTask,并附带性能对比分析。


基础线程(Thread类)
using System;
using System.Threading;

public class ThreadExample
{
    public static void Run()
    {
        Thread thread = new Thread(() => 
        {
            Console.WriteLine($"Thread ID: {Thread.CurrentThread.ManagedThreadId}");
            Thread.Sleep(1000); // 模拟耗时操作
        });
        thread.Start();
        thread.Join(); // 等待线程结束
    }
}
  • 特点:手动控制线程生命周期,开销较大,适合长期运行的任务。

线程池(ThreadPool)
using System;
using System.Threading;

public class ThreadPoolExample
{
    public static void Run()
    {
        ThreadPool.QueueUserWorkItem(state => 
        {
            Console.WriteLine($"ThreadPool ID: {Thread.CurrentThread.ManagedThreadId}");
            Thread.Sleep(1000);
        });
        // 注意:ThreadPool无需手动等待
    }
}
  • 特点:复用线程减少开销,但无法控制线程优先级或取消任务。

任务并行库(Task)
using System;
using System.Threading.Tasks;

public class TaskExample
{
    public static async Task Run()
    {
        Task task = Task.Run(() => 
        {
            Console.WriteLine($"Task ID: {Thread.CurrentThread.ManagedThreadId}");
            Thread.Sleep(1000);
        });
        await task; // 异步等待
    }
}
  • 特点:支持异步/等待模式,可取消任务和链式操作,现代推荐方式。

性能与适用场景对比

方法 启动开销 线程控制 任务取消 返回值支持 适用场景
Thread 完全控制 手动实现 需要精细控制的长期任务
ThreadPool 不支持 短期/高频小任务
Task 部分控制 支持 支持 异步编程/复杂任务流

扩展建议
  • 异步编程:优先选择Task配合async/await
  • 资源敏感场景:高频短任务使用ThreadPool
  • 调试工具:使用Parallel.ForEach简化数据并行操作。

更多推荐