首先,javascript 是一门单线程,无阻塞的脚本语言。

  • 何为单线程:就是在任何时候都只有一条线程在执行代码。
  • 无阻塞:就是执行代码任务时一路绿灯,畅通无阻。

无阻塞的实现主要依赖于一个机制,就是事件循环机制。

在事件循环机制里面,有两个概念,分别是主线程和任务队列。

  • 主线程:执行所有的同步任务和异步任务
  • 任务队列:存放所有的异步任务

任务队列主要分为两类:

  • 宏任务(macrotask):script代码,setTimeout,setInterval,setImmediately,I/O,UI render
  • 微任务(microtask):promise.then()/.catch(),process.nexttick()

宏任务和微任务之间的关系:(盗图 ^_^)

注意:

  1. 在同一次事件循环中,宏任务的执行是先于微任务的。
  2. 在执行微任务时,不要产生全新的微任务。
  3. 只有在一次事件循环中执行完所有由于执行宏任务产生的微任务之后,才会开始执行下一个宏任务。

宏任务和微任务的关系比喻

  • 宏任务:购物者
  • 微任务:购物者的商品
  • 执行栈:收银员

收银员在为购物者结账时,首先就是确定这个购物者服务选择的商品,然后对所有商品扫描计数之后,最后直到所有商品扫描完毕,完成结账;才算为这位购物者服务完毕。然后再为下一个购物者服务。

以上是自己的一些学习心得,希望各位大佬多多指教。

最新文章

  1. 【Spring】SpringMVC中浅析Date类型数据的传递
  2. dede在线留言
  3. TCP协议的一些问题
  4. 2017 google Round C APAC Test 题解
  5. C#学习笔记(3)
  6. 定位 - MapKit - 基本使用
  7. android开发学习笔记:圆角的Button
  8. Day1:T1 模拟 T2 拓扑排序
  9. 一些常见的CFD基本概念(飞机为例)(摘抄)
  10. 如何设置Maven代理
  11. MySQL 的分页查询 SQL 语句
  12. yii2 rules 验证规则
  13. ssh centos 上传文件
  14. Tutorial on GoogleNet based image classification --- focus on Inception module and save/load models
  15. WebRTC 基于GCC的拥塞控制(下)
  16. go语言之进阶篇通过结构体生成json
  17. 关于微软C#中的CHART图表控件的简单使用【转】
  18. Zindex和png
  19. cnetos7最小化安装ifconfig命令找不到怎么办
  20. C++中的数据存储方式自动存储、静态存储和动态存储

热门文章

  1. Linux系统防火墙相关操作
  2. ApiPost如何在预执行脚本里添加请求参数?
  3. spark2.4.5计算框架中各模块的常用实例
  4. c++ 更新 performance counter 数据,错误码 87
  5. 以命令行界面启动 Ubuntu
  6. @SessionAttributes 和 @SessionAttribute的区别
  7. java制作一个简单的抽签程序
  8. Error: Can't find Python executable "G:\Python27"
  9. mysql建立ssl安全连接的配置
  10. pv(PageView)的解释