异步编程工作过程

Posted 前端JavaScript

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步编程工作过程相关的知识,希望对你有一定的参考价值。

javascript采用单线程模式工作的原因

和它的设计初衷有关,最早JavaScript语言是运行在浏览器端的脚本语言,其目的是实现页面上的动态交互, 而实现页面交互的核心就是DOM操作,这就决定了js必须使用单线程模型 ,不然就会出现很复杂的线程同步问题。假如js是异步操作同时执行,其中一个线程修改了DOM操作,而另外一个线程同时又删除了这个元素,那么我们的浏览器就无法明确改以哪个线程的工作结果为准,所以为了避免这种线程同步的问题,JavaScript就被设计成了单线程模式工作,这也成为了这门语言最为核心的特点之一。
这里的单线程指的是js执行环境中负责执行代码的线程只有一个(也可以理解在执行任务的时候只有一个人执行,一个人同一时间只能执行一个任务,如果有多个任务就需要排队一个一个执行, 优点是:安全简单,缺点:遇到特别耗时的任务,后面的就会排队执行 ), 为了解决耗时执行的问题,JavaScript把任务的执行模式分成了两种:
    1)同步模式(Synchronous)
    2)异步模式(Asynchronous)


同步模式(Synchronous)

console.log('global begin')function bar () { consoler.log('bar task')}function foo () {  consoler.log('foo task')  bar()}foo()consoler.log('global end')


异步模式(Asynchronous)

JavaScript是单线程的,而浏览器不是单线程的,具体说是JavaScript调用的内部API不是单线程的,例如倒计时器,它内部就有一个单独的线程去负责倒数,等时间到了之后会把回调放到消息队列,我们说的单线程是指执行代码的线程是一个线程,也就是内部的API会实现单独的线程执行操作;
运行环境提供的API是以同步或异步模式的方式工作。

异步API

异步的API不会去等待当前任务的结束才开始下一个任务,对于耗时操作都是开启过后就立即往后执行下一个任务,后续逻辑一般会通过回调函数的方式定义(耗时操作执行完毕之后会自动执行回调函数)。

异步编程的优劣
  • 如果没有异步模式,单线程的JavaScript语言就无法同时处理大量耗时任务;

  • 异步编程的难点在于代码的执行顺序混乱;
  • 异步编程是JavaScript的核心特点,也是大量异步API的关系,写出的JavaScript代码也就没有那么容易读,执行顺序也相对会复杂很多,特别是复杂的业务逻辑,要学习JavaScript中那些为异步而生的语法,特别是es2015之后推出的新语法,新特性,这些慢慢弥补了JavaScript在异步编程这块的不足或者不便。

异步执行流程
异步编程工作过程
案例分析
console.log('gobal begin') 1setTimeout(function timer1 () { console.log('timer1 invoke') 4}, 1800)setTimeout(function timer2 () { console.log('timer2 invoke') 3 setTimeout(function timer3 () { console.log('timer1 invoke') 5 }, 1000)}, 1800)console.log('global end') 2


执行结果



 
   
   
 

以上是关于异步编程工作过程的主要内容,如果未能解决你的问题,请参考以下文章

java 登录过程 - android片段,异步任务登录,Asp.net控制器,存储库

NodeJs异步的执行过程

使用Task.Wait而不是等待异步编程

究竟什么是异步编程?

究竟什么是异步编程?

.net 异步编程总结