1. 为什么需要多线程?
我第一次接触多线程是在开发一个数据采集系统时。当时程序需要同时从多个传感器读取数据,还要实时显示波形并保存到数据库。单线程模式下,界面会频繁卡顿,数据丢失率高达15%。改用多线程后,这些问题迎刃而解。
多线程的核心价值在于并发执行能力。现代CPU通常有多个核心,但单线程程序只能利用其中一个。通过创建多个线程,我们可以:
- 提升CPU利用率(实测i7-11800H运行多线程时利用率从12%提升到78%)
- 避免阻塞主线程(特别是UI线程)
- 简化复杂任务的组织结构
注意:多线程不是银弹。线程切换本身有开销,当线程数超过CPU核心数时,性能反而可能下降。我的经验法则是:计算密集型任务线程数=核心数,IO密集型可适当增加。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. C#多线程基础实现
2.1 Thread类基础用法
最直接的线程创建方式:
csharp复制using System.Threading;
void WorkerMethod()
{
Console.WriteLine($"线程ID:{Thread.CurrentThread.ManagedThreadId}");
}
Thread worker = new Thread(WorkerMethod);
worker.Start();
关键参数说明:
- IsBackground:设为true时,线程会在主线程退出时自动终止(默认false)
- Priority:从Lowest到Highest共5个级别,影响线程调度权重
- ThreadState:监控线程状态(Running, WaitSleepJoin等)
实测案例:在我的i7-11800H上,同时运行8个计算线程时:
- 默认优先级完成时间:23.6秒
- 设为Highest后:19.8秒(提升16%)
2.2 线程传参的三种方式
- 通过Start参数传递(类型安全):
csharp复制void Worker(object data)
{
if(data is int value) {...}
}
new Thread(Worker).Start(42);
- 使用Lambda捕获:
csharp复制int param = 42;
new Threa
