说说你对事件循环的理解?

简介: 说说你对事件循环的理解?

简介:

js是一门单线程语言,意味着在同一时间只能做一件事,但并不意味这单线程就是阻塞,而实现单线程非阻塞的方法就是事件循环

两种任务:

在js中任务可以分为两种:同步任务 和 异步任务

同步任务:立即执行任务,同步任务一般直接进入主线程中

异步任务:异步执行的任务,如ajax网络请求等

事件循环:

同步任务进入主线程,即主执行栈,异步任务进入任务队列,主线程内的任务执行完毕为空,会去任务队列读取对应的任务。推入主线程,重复执行上述过程就是事件循环

宏任务和微任务

将任务分为同步任务和异步任务并不准确,因为,异步任务是存放在队列中的,而队列讲究一个先进先出,排在前面的任务,会优先执行,可事实并非如此,原因在与异步任务还可以分为宏任务 和 微任务

微任务

一个需要异步执行的函数,执行时机是在主函数执行结束之后,当前宏任务结束之前
常见的微任务有:
Promise.then 、MutaionObserver、Object.observe(已废弃;Proxy 对象替代)、process.nextTick(Node.js)

宏任务

宏任务的时间粒度比较大,执行的时间间隔是不能精确控制的,对一些高实时性的需求不太符合
常见的宏任务有:
script(可以理解为外层同步代码),setTimeout/setInterval、UI rendering/UI事件、postMessage、MessageChannel。

执行机制

执行一个宏任务,如果遇到微任务就将他放到微任务的事件队列中

当前宏任务执行完成后,会查看微任务的事件队列,然后将里面的微任务依次执行完毕

async和await

async是用来声明一个异步方法,而await是用来等待异步方法执行

async返回一个promise对象

await后面跟一个promise对象,返回该对象的结果,如果不是promise对象,就直接返回结果。


相关文章
|
6月前
|
存储 Java API
ntyco协程的理解
ntyco协程的理解
83 0
|
1月前
|
JavaScript 数据库
事件循环
【10月更文挑战第28天】
37 3
|
18天前
|
存储 JavaScript 前端开发
事件循环的原理是什么
事件循环是一种编程机制,用于在单线程环境中处理多个任务。它通过维护一个任务队列,按顺序执行每个任务,并在任务之间切换,从而实现并发处理。在每个循环中,事件循环检查是否有新的任务加入队列,并执行就绪的任务。
|
1天前
|
前端开发 JavaScript API
前端:事件循环/异步
前端开发中的事件循环和异步处理是核心机制,用于管理任务执行、性能优化及响应用户操作,确保网页流畅运行。事件循环负责调度任务,而异步则通过回调、Promise等实现非阻塞操作。
|
2月前
|
存储 JavaScript 前端开发
JavaScript:事件循环机制(EventLoop)
【9月更文挑战第6天】JavaScript:事件循环机制(EventLoop)
35 5
|
3月前
|
存储 前端开发 JavaScript
事件循环机制是什么
【8月更文挑战第3天】事件循环机制是什么
38 1
|
6月前
|
前端开发 编译器 Linux
浅谈C++20 协程那点事儿
本文是 C++20 的协程入门文章,作者围绕协程的概念到协程的实现思路全方位进行讲解,努力让本文成为全网最好理解的「C++20 协程」原理解析文章。
|
数据采集 缓存 调度
协程小练习
协程小练习
|
6月前
|
前端开发 JavaScript UED