美文网首页
javaScript异步编程总结

javaScript异步编程总结

作者: 小q | 来源:发表于2020-06-01 17:11 被阅读0次

JavaScript是一门单线程的非阻塞的脚本语言

javaScript最初是运行在浏览器端的脚本语言,解决的问题相对简单。目的是实现页面的动态交互,实现页面动态交互的核心就是DOM操作。所以采用单线程模式,避免多线程同步问题。

同步模式与异步模式

JavaScript运行代码时会存在两种模式:同步模式与异步模式。存在异步模式的原因也很简单。因为同步模式下执行一段代码,代码
中任务依次执行,前一个任务结束后才会进行下一个任务。当执行某些耗时任务时就会造成堵塞。所以异步模式就把这些耗时的任务单体提出来另外执行,等到同步代码执行完后再去返回执行好的异步任务的结果。

event loop(事件循环)

evnet loop的作用就是解决js单线程运行时不会阻塞的一种机制。
先看下面这个流程图


event loop流程图
  • call stack是调用栈,js代码会放在这里执行
  • event loop是事件循环,它负责的就是不断检查调用栈中是否还有任务,如果没有就将右侧消息队列中的任务放入调用栈。

下面来分析这个流程图:

  1. 执行代码,将任务放入调用栈,判断是同步任务还是异步任务。如果是同步任务就执行该任务。异步任务则会被放入异步队列中执行,拿到结果的异步任务被放入消息队列中等待。
  2. 当c调用栈中同步任务执行完后,就从消息队列中依次异步任务压入调用栈。Event Loop去不停检查调用栈中是否还有任务,如果没有就去看消息队列中有没有任务,如果有就放入调用栈,如此反复,直到完成所有任务。

宏任务与微任务

  • 宏任务有整体代码,setTimeout,I/O,setInterval等
  • 微任务有process.nextTick(Node),Promise


    宏任务,微任务流程图

这里不同类型的任务会进入不同的事件队列。事件循环顺序是先去执行宏任务,执行宏任务时检查有无微任务,有微任务就放入末尾,等当前宏任务执行完后依次执行微任务。待这个宏任务中的微任务执行完后再执行下一个宏任务。
这里打个比方,在银行排队办业务的人,他所要办的主要的事比如取钱,这是一个宏任务,当他取完钱以后他想查询一下余额,这个可以看成微任务。这时,他不需要再去排队,直接查询余额。等他办完事走了下个人继续办理业务。

相关文章

  • JavaScript异步编程好文摘要

    JavaScript之异步编程简述JavaScript异步编程

  • 异步编程控制方法

    javascript 具有的一个特性就是异步编程。异步编程具有的优势本文不做细说,本文主要是总结如何异步编程中出现...

  • part1整理

    函数式编程:JavaScript函数式编程指南 异步编程:异步编程 Promise源码 JavaScript基础知...

  • Javascript异步编程总结

    Javascript语言的执行环境是单线程的,即一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成...

  • javaScript异步编程总结

    JavaScript是一门单线程的非阻塞的脚本语言 javaScript最初是运行在浏览器端的脚本语言,解决的问题...

  • 一篇看完JS异步编程的进阶史

    一、Javascript实现异步编程的过程以及原理 1、为什么要用Javascript异步编程 众所周知,Java...

  • ES6 之 Promise

    Promise是JavaScript异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步...

  • JavaScript(ES6) - Async

    异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...

  • Javascript------异步编程的4种方法

    Javascript异步编程的4种方法

  • 深入了解下Promise

    Promise 意义 Promise 的诞生与 Javascript 中异步编程息息相关,js 中异步编程主要指 ...

网友评论

      本文标题:javaScript异步编程总结

      本文链接:https://www.haomeiwen.com/subject/ybkszhtx.html