async和await、Task和线程池线程的关系

计算机进入多核时代,开发人员想要充分利用计算机内核,需要编写多线程程序。线程属于进程,理想状态下,在4核的计算机上最好有4个线程。

早期的线程创建是利用 Thread类,线程的创建需要花费很多时间,基于此,微软公司为开发人员创建了线程池,线程池具有智能爬山算法,可以

根据线程的使用情况,动态调整线程的增加或者减少,当线程使用完成后,线程不会销毁,而是回到线程池中,当新的代码需要线程执行的时候,

就可以利用这个已经创建好的线程,当一个线程一段时间不使用,它便会终结自己。毕竟,线程也需要占用空间。

线程的问题在于无法知道代码是否执行完成,为此,微软公司创建了Task,这个任务可以查询到状态,已完成,出错或者准备开始,Parallel.for

和PLinq都是基于任务。

虽然Task可以表示任务的状态,但是对于异步任务却并不特别试用。因为异步任务并不是在当前程序完成的,需要利用操作系统或者远程服务器,

那么,当任务执行在操作系统或者远程计算机的时候,这段时间,线程就是阻塞状态。

为此,微软公司推出了async和await,await是编译器为你写的代码,执行代码肯定需要花费时间,所以await会减慢程序的运行速度,await的作用

是:当你执行一个异步任务的时候,使你的线程返回程序,这段时间任务的执行是在操作系统执行或者是在远程计算机上,所以你的线程可以继续

做其他的工作,将来的某个时候,线程池线程会通知Task对象,后者执行await后面的代码,执行编译器为你生成的代码,查询任务状态。

好文要顶 关注我 收藏该文  

猜你喜欢

转载自blog.csdn.net/u010941149/article/details/82788051