同步和异步

JavaScript语言的一大特点就是单线程,也就是说,同一时间只能做一件事.这是因为JavaScript这门脚本语言诞生的使命所致--JavaScript是为了处理页面中用户的交互,以及操作DOM而诞生的.比如我们对某个DOM元素进行添加和删除,不能同时进行.应该先进行添加,之后再删除.

为什么会有异步

单线程会导致JS执行时间过长,页面渲染不连贯,导致页面加载渲染阻塞.为了解决这个问题,HTML5提出Web Worker标准,允许脚本创建多个线程.于是,Js出现了同步和异步.

同步和异步的区别

其实同步和异步,
无论如何,做事情的时候都是只有一条流水线(单线程),同步和异步的差别就在于这条流水线上各个流程的执行顺序不同。同步就是一件事一件事的执行。只有前一个任务执行完毕,才能执行后一个任务.异步则是你在做一件事情时,因为这件事情会花费很长时间,在这等待过程中你可以先去处理其他事情,等这件事轮到你的时候再过来处理即可。

同步和异步的执行原理

同步任务都在主线程上执行,形成一个执行栈.异步任务是通过回调函数实现的.

  1. 先执行执行栈中的同步任务
  2. 异步任务(回调函数)放入任务队列中
  3. 一旦执行栈中的同步任务执行完毕后,系统就会按次序读取任务队列的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行
    同步和异步.jpg

常见的异步模式

  • 回调函数
  • 事件监听
  • 发布/订阅模式(又称观察者模式)
  • promise

后来ES6中,引入了Generator函数;ES7中,async/await更是将异步编程带入了一个全新的阶段。

Last modification:March 8th, 2020 at 04:09 pm
如果觉得我的文章对你有用,请随意赞赏