多线程的概念和应用
/// <summary> /// 1.进程和线程的特点 /// 2.委托启用多线程 /// 3.多线程的特点:不卡主线程,速度快无秩序 /// 4.异步的回调和状态参数 /// 5.异步等待的三种方式 /// 6.异步的返回值 /// /// 进程 和线程的 是计算机概念 /// 进程:运行时 占用全部计算资源的总和 /// 线程:程序执行流的最小单位;任何操作都是由线程完成的; /// 线程是依托进程存在的,一个进可以包括多个线程; /// 线程也可以有自己的计算资源 /// 多线程:多个执行流同事运行 /// 1.CPU 太快了,分时间片--上线文切换(架子环境 -- 计算 -- 保存环境) /// 微观视角,一个核同一时刻只能执行一个线程; /// 宏观视角,多线程并发 /// 2:多核(多CPU),可以独立工作 /// 四核八线程 --- 核是物理核,线程是虚拟核 /// /// Thread 是C# 语言对线程的封装 /// /// 同步 :完成计算后,再进入下一行 /// 异步 :不会等待方法的完成,会直接进入下一行 /// /// 1、同步方法卡界面,主线程忙于计算 /// 异步多线程方法不卡界面,主线程完了,计算任务交给子线程去做 /// winform 提升用户体验;web 一个业务操作后要发邮件,异步发送邮件 /// 2、同步方法慢,只有一个线程干活 /// 异步多线程方法快,因为多线程并发运算; /// 便是不是线程越多越好,并非线程增长,a资源换时间 多线程也有时间管理成本 /// 3.异步多线程 的应用 /// 1)多个独立任务同时运行; /// 4.异步多线程无序,启动无序,结束无序,执行时间不确定 /// </summary>
异步操作方式
IAsyncResult async = null; //异步操作的状态 Action<string> action = this.Calc; //创建实例 AsyncCallback callback = _ia => { Console.WriteLine(_ia == async);//判断 callback 的 参数 IAsyncResult 和 委托异步操作的实例是否是一个;Result 是一个 Console.WriteLine(_ia.AsyncState);//调用异步状态 “wuyc” Console.WriteLine("已经结束"); }; async = action.BeginInvoke("Show1_", callback, "wuyc");//异步调用 action.EndInvoke(async);//使 async 异步调用 完成的时候才能继续往下执行