zoukankan      html  css  js  c++  java
  • 异步编程async/await

    什么是异步?

    在异步程序中,程序代码不需要按照编写时的顺序严格执行,有时需要一在一个新的线程中运行一部分代码,有时无需创建新的 线程,但是为了更好的利用单个线程的能力,需要改变代码的执行顺序。

    进程

    启动程序时,系统会在内存中创建一个新的进程。进程是构成运行程序的资源的集合,这些资源包括虚地址空间、文件句柄和许多其他程序运行所需的东西。

    线程

    在进程内部,系统创建一个称为线程的内核对象,它代表了真正执行的程序。线程是执行线程的简称。一旦线程建立,系统会在Main方法的第一句开始线程的执行。

    线程知识点:

    1、默认情况下,一个进程只包含一个线程,从程序的开始一直执行到结束。

    2、线程可以派生其他线程,因此在任何时刻,一个进程都可能包含不同状态的多个线程,来执行程序的不同部分。

    3、如果一个进程拥有多个线程,它们将共享进程的资源。

    4、系统为处理器执行所规划的单元是线程,不是进程。

    为什么需要异步编程?

    一个服务器程序可能会持续不断在发起到其他服务器的连接,并向他们请求数据,同时处理来自多个客户端程序的请求,这种通信任务往往耗费大量时间,在此期间程序只能等待网络或者互联网上其他计算机的响应,这严重削弱了性能。程序不应该浪费等待响应的时间,而应该更加高效,在等待的同时执行其他任务,回复到达后再继续执行第一个任务。

    实例:

    call1和call2占用了大部分时间,不管哪次调用,绝大部分时间都浪费在等待网站的响应上。

    如果我们能初始化两个CountCharater调用,无需等待结果,而是直接执行4个CountToAlageNumber调用,然后在两个CountCharacter方法调用结束时在获取结果,就可以明显的提升性能。

     结果如下:

    async/await版本的程序的时间轴

  • 相关阅读:
    $("").append无反应
    go 客户端、服务端
    go mysql insert变量到数据库
    .gvfs: Permission denied
    go笔记
    java socket通信笔记
    (转)linux中top命令下显示出的PRNIRESSHRS\%MEM TIME+都代表什么
    adb Android Debug Bridge 安卓调试桥
    一阶段冲刺(四)
    一阶段冲刺(三)
  • 原文地址:https://www.cnblogs.com/MirZhai/p/7600294.html
Copyright © 2011-2022 走看看