zoukankan      html  css  js  c++  java
  • async和await、Task和线程池线程的关系

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

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

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

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

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

    和PLinq都是基于任务。

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

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

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

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

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

  • 相关阅读:
    oauth
    web api Authorization
    sql 找到前三
    js计算误差修正代码(真实版)
    js操作keyframes动态赋值
    元素拖拽缩放的jquery插件
    js生成组织结构树(原创)
    js图片拖拽、缩放、添加图层功能(原创)
    for循环,forin循环和Array.every(),obj.forEach()方法运行速度对比
    for循环+forin循环生成内容模版
  • 原文地址:https://www.cnblogs.com/xszdxsz/p/9672659.html
Copyright © 2011-2022 走看看