计算机进入多核时代,开发人员想要充分利用计算机内核,需要编写多线程程序。线程属于进程,理想状态下,在4核的计算机上最好有4个线程。
早期的线程创建是利用 Thread类,线程的创建需要花费很多时间,基于此,微软公司为开发人员创建了线程池,线程池具有智能爬山算法,可以
根据线程的使用情况,动态调整线程的增加或者减少,当线程使用完成后,线程不会销毁,而是回到线程池中,当新的代码需要线程执行的时候,
就可以利用这个已经创建好的线程,当一个线程一段时间不使用,它便会终结自己。毕竟,线程也需要占用空间。
线程的问题在于无法知道代码是否执行完成,为此,微软公司创建了Task,这个任务可以查询到状态,已完成,出错或者准备开始,Parallel.for
和PLinq都是基于任务。
虽然Task可以表示任务的状态,但是对于异步任务却并不特别试用。因为异步任务并不是在当前程序完成的,需要利用操作系统或者远程服务器,
那么,当任务执行在操作系统或者远程计算机的时候,这段时间,线程就是阻塞状态。
为此,微软公司推出了async和await,await是编译器为你写的代码,执行代码肯定需要花费时间,所以await会减慢程序的运行速度,await的作用
是:当你执行一个异步任务的时候,使你的线程返回程序,这段时间任务的执行是在操作系统执行或者是在远程计算机上,所以你的线程可以继续
做其他的工作,将来的某个时候,线程池线程会通知Task对象,后者执行await后面的代码,执行编译器为你生成的代码,查询任务状态。