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


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

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

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

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

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

    和PLinq都是基于任务。

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

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

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

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

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

  • 相关阅读:
    单位矩阵
    向量的内积(也叫点积)
    svm
    vue.js 中this.$router.push()的使用
    Spring Bean 的加载过程
    Solr是什么?
    Servlet中如何获取用户提交的查询参数或表单数据?
    Redis面试题大全含答案
    Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
    抽象类(abstract class)和接口(interface)有什么异同?
  • 原文地址:https://www.cnblogs.com/xszdxsz/p/9672659.html
Copyright © 2020-2023  润新知