![](https://img2023.cnblogs.com/blog/529017/202301/529017-20230105100241348-891734702.png)
![](https://img2023.cnblogs.com/blog/529017/202301/529017-20230105100609291-1225001435.png)
/// 进程之间不会相互干扰--进程之间的通信比较困难(分布式)
/// 线程:程序执行的最小单位,相应操作的最小执行流
/// 线程也包含自身的计算资源
/// 线程是属于进程的,一个进程可包含多个线程
/// 多线程:一个进程里,有多个线程并发执行;一个进程有多个线程同时运行
/// 句柄:其实就是一个long数字,是操作系统标识应用程序
/// C#
/// 多线程Thread:类,就是一个封装,是.net Framework对线程对象的抽象封装
/// 通过Thread去完成的操作,最终是通过向操作系统请求得到的执行流
/// CurrentThread:当前线程,任何操作执行都是线程完成的,运行当前代码的线程
/// ManagedThreadId:是.net平台给Thread起的名称(就是一个int值,尽量不重复)
///
/// --------------特征1:--------------
/// 同步单线程方法--卡界面--主线程(UI)忙于计算,所以不能即时响应
/// 异步多线程方法--不卡界面--主线程(UI)以加载完成,计算任务由子线程进行,无阻塞,可响应其他操作
/// --------------特征2:--------------
/// 同步单线程方法--慢--因为只有一个线程计算
/// 异步多线程方法--快--因为多个线程并发计算,多线程就是用资源换性能(资源有上限且不是线性增长)
/// ThreadPool--有上限的
/// Thread--是可启动10000个,但PC可能死机--线程并不是越多越好
/// --------------特征3:--------------
/// 多线程--无序性--不可预测性
/// 启动无序:几乎同一时间像操作系统请求线程,也是需要CPU处理的请求
/// 因为线程是操作系统资源,CLR只能去申请,具体是什么顺序,无法掌控
/// 执行时间不确定:同一个线程同一个任务耗时也可能不同--
/// 其实跟操作系统的调度策略有关,CPU分片<计算能力太强,1s分拆1000份,宏观上就变成了并发>
/// 那么任务执行过程就得看运气--线程的优先级可以影响操作系统的调度
/// 单线程--有序执行
/// 注:使用多线程不能使用延时掌控顺序
/// 同步执行--Invoke--同步能保证顺序,UI会出现卡死,无提示,体验差(只有主线程可操作UI)
/// 异步执行--BeginInvoke(不阻塞)
Thread用于多线程的声明使用,可应用有参、无参使用
Thread th = new Thrad(Method());
th.Start();
Thread.Sleeep(1000)用于等待
async关键字表示异步执行
await用于串行执行,即完成一步操作后,再执行下一步操作
Task同样适用于多线程的执行,用于对多个操作的执行
当将Task任务新增至List<TASK>列表时,列表中的任务可并行执行,
并行执行完成后可使用Task.WhenAll(List<TASK>).ContinueWith
(t=>
{
MessageBox.Show("当任务列表执行完成后,执行该操作");
}
);