- 进程:一个程序运行时,占用全部计算资源的总和
- 线程:
- 程序执行流的最小单位,任何操作都是由线程完成。
- 线程是依托于进程存在的,一个进程可以包含多个线程
- 线程也可以有自己的计算资源
- 多线程:多个执行流同时运行
- 同步:完成计算之后,进入下一行步骤
-
Thread
new Thread(() => Console.Write(1)).Start();new Thread(Print).Start();void Print(){Console.Write(1);}
线程优先级
enum ThreadPriority{Loweast, BelowNormal, Normal, AboveNormal, Highest}
Async
同步方法慢,只有一个线程干活,异步多线程方法快,因为有多个线程并发运算
- 资源换时间
- 有管理成本
- 并不是越多越好
- 启动无序
- 结束无序
- 执行时间不确定
委托的异步调
BeginInvoke
BeginInvoke(string obj, AsyncCallback callback, object @object)
Action<string> action = this.DoSomethingLong;for (int i = 0; i < 5; i++){string name = string.Format($"{i}");action.BeginInvoke(name, null, null);}
EndInvoke
EndInvoke(IAsyncResult asyncResult)
可以等待,并且带返回值
- AsyncCallback,可以指定线程完成之后执行的委托
- IAsyncResult,线程执行后的结果
- 结果会传给AsyncCallback
前台和后台线程
- 默认情况下,手动创建的线程是前台线程
- 只要有前台线程再运行,那么应用程序就会一直处于活动状态
- 后台线程却不行
- 一旦所有的前台线程停止,那么应用程序就停止了
- 然后后台线程也会突然终止
- IsBackground判断是否后台线程
