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

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

简介:

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对象,就直接返回结果。


相关文章
|
8月前
|
存储 Java API
ntyco协程的理解
ntyco协程的理解
90 0
|
3月前
|
JavaScript 数据库
事件循环
【10月更文挑战第28天】
40 3
|
2月前
|
存储 JavaScript 前端开发
事件循环的原理是什么
事件循环是一种编程机制,用于在单线程环境中处理多个任务。它通过维护一个任务队列,按顺序执行每个任务,并在任务之间切换,从而实现并发处理。在每个循环中,事件循环检查是否有新的任务加入队列,并执行就绪的任务。
|
5月前
|
存储 前端开发 JavaScript
事件循环机制是什么
【8月更文挑战第3天】事件循环机制是什么
41 1
|
7月前
|
调度 C++ 开发者
C++一分钟之-认识协程(coroutine)
【6月更文挑战第30天】C++20引入的协程提供了一种轻量级的控制流抽象,便于异步编程,减少了对回调和状态机的依赖。协程包括使用`co_await`、`co_return`、`co_yield`的函数,以及协程柄和awaiter来控制执行。它们适合异步IO、生成器和轻量级任务调度。常见问题包括与线程混淆、不当使用`co_await`和资源泄漏。例如,斐波那契生成器协程展示了如何生成序列。正确理解和使用协程能简化异步代码,但需注意生命周期管理。
129 4
|
数据采集 缓存 调度
协程小练习
协程小练习
|
8月前
|
前端开发 编译器 Linux
浅谈C++20 协程那点事儿
本文是 C++20 的协程入门文章,作者围绕协程的概念到协程的实现思路全方位进行讲解,努力让本文成为全网最好理解的「C++20 协程」原理解析文章。
|
8月前
|
前端开发 JavaScript UED
|
8月前
|
Web App开发 前端开发 JavaScript
什么是事件循环 Eventloop
什么是事件循环 Eventloop
96 0