事件循环机制
1.概念
线程 进程
-
1进程 - n线程
-
一个应用程序 会有多个线程(特点:同时并发执行)
java c c++ 都有线程 多线程编程可以通过代码创建线程 -
javascript语言,不能自己创建线程,执行javascript的代码和javascript引擎是一个线程
-
javascript只是不能用代码创建线程但执行也是可以多线程执行,比如负责执行js代码的javascript引擎线程,负责网络请求线程http线程,负责界面渲染线程等等线程
2.处理js中的并发执行的异步任务
- 异步任务:定时器 setTimeout 、serInterval、promise.then()、ajax…
1.执行栈
栈:先进后出,后进先出。负责执行js语句代码。
2.异步调度模块
异步调度模块:
- 遇到异步任务放入,放入异步调度模块。
- 根据异步条件,将要执行的异步代码放入任务列表。
3.任务队列
- 存放异步任务代码
- 队列数据结构: (先进先出)
3.js主线引擎执行代码的步骤
1.判断同步代码还是异步代码。
2.如果是同步代码直接放入执行栈执行,执行完出栈。
3.如果是异步代码,则放入异步模块,异步模块根据异步任务,放入任务队列等待下次执行,异步任务队列先进先出。
4.异步代码又分为 微任务 和 宏任务,如果同时出现了微任务和宏任务。
- 微任务放到微任务执行队列,微任务先执行
- 宏任务放到宏任务执行队列,宏任务后执行