ES6----EventLoop

简介: ES6----EventLoop

JavaScript是单线程语言

JavaScript是一门单线程执行的编程语言,即同一时间只能做一件事情。

单线程执行任务队列的问题:

如果前一个任务非常耗时,则后续的任务就会一直等待,从而导致程序假死。

同步任务和异步任务

为了防止某个耗时任务导致程序假死的问题,JavaScript把待执行的任务分为了两类:

同步任务( synchronous)

又叫做非耗时任务,指的是在主线程上排队执行的那些任务

只有前一个任务执行完毕,才能执行后一个任务

异步任务( asynchronous)

又叫做耗时任务,异步任务由JavaScript委托给宿主环境进行执行

当异步任务执行完成后,会通知JavaScript主线程执行异步任务的回调函数

同步任务和异步任务的执行过程

1.同步任务由JavaScript主线程次序执行

2.异步任务委托给宿主环境执行

3.已完成的异步任务对应的回调函数,会被加入到任务队列中等待执行

4.JavaScript主线程的执行栈被清空后,会读取任务队列中的回调函数,次序执行

5.JavaScript主线程不断重复上面的第4步

EventLoop

Javascript主线程从“任务队列”中读取异步任务的回调函数,放到执行栈中依次执行。这个过程是循环不断的,所以整个的这种运行机制又称为EventLoop(事件循环)

结合EventLoop分析执行顺序

同步任务执行完成了才会执行异步任务

import thenFs from 'then-fs'
// 同步任务,按执行顺序,第一个输出
console.log('A')
// 异步任务,委托给宿主环境
// 读取文件需要时间,进入任务队列在 setTimeout 之后
thenFs.readFile('./1.txt', 'utf8' ).then(datastr=>{
  console.log( 'B')
})
// 异步任务,委托给宿主环境
// 由于 setTimeout 设置的执行时间为 0 ,所以进入任务队列先于 readFile
setTimeout(()=>{
  console.log('C')
}, 0)
// 同步任务,第二个输出
console.log('D')
A
D
C
B
相关文章
|
9月前
|
存储 JavaScript API
39 # events 模块的实现原理
39 # events 模块的实现原理
16 0
|
11月前
|
前端开发
|
11月前
|
前端开发 JavaScript 开发者
|
11月前
|
前端开发 JavaScript
ES6----宏任务和微任务
ES6----宏任务和微任务
|
前端开发 JavaScript
ES8 新特性 ------ async 和 await
ES8 新特性 ------ async 和 await
|
前端开发 JavaScript
ES6 ------ 基础(三)——Promise 基本使用
ES6 ------ 基础(三)——Promise 基本使用
|
JavaScript 前端开发
ES6 ------ 基础(五)
ES6 ------ 基础(五)
|
网络架构
ES6 ------ 基础(一)
ES6 ------ 基础(一)