您现在的位置是:亿华云 > 应用开发
事件循环机制:JavaScript被设计为单线程,那如何做到异步的呢?
亿华云2025-10-05 10:32:40【应用开发】3人已围观
简介JavaScript是单线程的语言,单线程是指所有的程序路径按照一定的顺序执行,只有前面的程序执行了,后面的程序才会执行。也就是说在同一时间,JavaScript只能做一件事情,为了协调浏览器产生的各
JavaScript是事件单线程的语言,单线程是循环指所有的程序路径按照一定的顺序执行,只有前面的机制计程序执行了,后面的被设步程序才会执行。
也就是单线到异说在同一时间,JavaScript只能做一件事情,程那为了协调浏览器产生的事件各种事件、网络处理、循环前端渲染等行为,机制计js的被设步事件循环机制,即EventLoop应运而生。单线到异
JavaScript是程那单线程的原因js的设计初衷是作为浏览器的脚本语言,浏览器中涉及到与用户互动、事件频繁操作DOM等动作,循环如果js设计为多线程,机制计会有很复杂的线程同步问题,即使同步问题被解决,也会降低浏览器的服务器托管响应效率,得不偿失,因此,JavaScript被设计为单线程保证浏览器动作的一致性。
事件循环(EventLoop)JavaScript既然被设计为单线程,是如何做到异步的呢?这时就用到了JavaScript的事件循环机制。
如下图所示为JavaScript事件循环的原理图。
如图所示,事件循环是主线程循环读取任务队列中的任务,直到所有的任务都被执行。在事件循环中,JavaScript用到了栈、堆以及队列等数据结构。
栈中存放的是执行上下文,有函数被调用时,就会创建上下文存放在执行栈中。堆中表示一个非结构化的内存区域,用来存放对象。队列是指任务队列,用于存放异步任务。js引擎遇到一个异步事件之后不会一直等待事件的云服务器返回结果,而是将事件挂起,继续执行执行栈中的其他任务。当异步事件返回结果时,js将异步事件callback函数放入队列中,被放入队列中的异步事件不会立即回调,等到当前执行栈中的任务都执行完成,处于闲置状态的主线程按照队列顺序将处于首位事件的callback函数放入执行栈中,执行该函数的同步代码,如果遇到了异步事件,同样也会将其回调函数放入事件队列中......
如此反复,就形成了一个无限循环,这也是被称为“事件循环(EventLoop)”的原因。
宏任务(Micro task)和微任务(Macro task)js事件循环的基本原理已经描述清楚,但是异步任务之间也有所不同。
上面讲到,JavaScript在执行异步任务时,回调函数会被放在js的任务队列中,实际上,回调函数的类别不同,网站模板执行的优先级也不同。
不同的优先级被分为两类,一类是宏任务(Micro task),一类是微任务(Macro task)。
回调函数是微任务时,会被放在微任务队列,回调函数是宏任务时,会被放在宏任务队列。微任务的优先级高于宏任务,当主线程的任务执行完成时,会首先去执行微任务队列中首位的回调函数,当微任务队列中为空时,才回去执行宏任务队列中的回调函数。
常见的微任务有:promise,常见的宏任务有setInterval等。
因此,事件循环的执行流程图如下所示:
很赞哦!(11)
相关文章
- 域名资源有限,好域名更是有限,但机会随时都有,这取决于我们能否抓住机会。一般观点认为,国内域名注册太深,建议优先考虑外国注册人。外国注册人相对诚实,但价格差别很大,从几美元到几十美元不等。域名投资者应抓住机遇,尽早注册国外域名。
- Java 问题排查技术分享
- 神奇的滤镜!巧妙实现内凹的平滑圆角
- 企业官网可以有两个域名吗?深度解析多域名策略
- ICANN 规章禁止转移已经被记录或者在60天前内转移的域名。
- 关于SQL优化,你不能只是说自己只会语句的优化了
- SQL、Pandas和Spark:常用数据查询操作对比
- 二手双拼域名在哪购买?
- 只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
- 一个支持监听SQL、感知事务状态、回溯数据源的动态数据源框架
热门文章
站长推荐
用户邮箱的静态密码可能已被钓鱼和同一密码泄露。在没有收到安全警报的情况下,用户在适当的时间内不能更改密码。在此期间,攻击者可以随意输入帐户。启用辅助身份验证后,如果攻击者无法获取移动电话动态密码,他将无法进行身份验证。这样,除非用户的电子邮件密码和手机同时被盗,否则攻击者很难破解用户的邮箱。
不可忽视的MySQL字符集
前端百题斩之从验证点到手撕 New 操作符
高估价域名都有什么表现?
4、待所有域名查询结束后可在右侧点击导出结果,即可以excel的文件方式将查询到的结果导出。
SQL Server常用的日期和时间函数梳理
开启TypeScript之旅的简便方式
手写一个 Ts-Node 来深入理解它的原理