首页 > 其他分享 >事件循环机制

事件循环机制

时间:2023-05-14 20:12:31浏览次数:23  
标签:异步 调用 函数 队列 任务 循环 事件 机制 执行

事件循环是 JavaScript 的一种执行机制,用于协调异步任务的执行顺序、传递消息以及处理用户交互等事件。事件循环由以下四个组成部分组成。

  1. 调用栈(Call Stack):调用栈是 JavaScript 的一种执行机制,用于控制函数的执行顺序。当函数被调用时,将函数压入调用栈中,并开始执行函数,函数执行完成后从调用栈中弹出并返回结果。如果调用栈为空,则脚本停止执行。

  2. 任务队列(Task Queue):任务队列是 JavaScript 的一种执行机制,用于存储异步任务的回调函数。当异步任务完成时,将回调函数添加到任务队列中等待被执行。

  3. 事件循环(Event Loop):事件循环是 JavaScript 的一种执行机制,用于协调调用栈和任务队列的执行顺序。事件循环不断地从任务队列中取出第一个回调函数,并将其压入调用栈中执行,直到任务队列为空为止。

  4. 微任务队列(Microtask Queue):微任务队列是在事件循环的回调函数执行过程中产生的,用于存储微任务的回调函数。当微任务产生后,会被添加到微任务队列中,等待事件循环调用栈为空时执行。微任务包括 Promise、MutationObserver 等。

简单来说,事件循环机制就是将所有的任务分成两类,一类是同步任务,另一类是异步任务,将异步任务挂起,并将其回调函数添加到任务队列中等待执行,待同步任务执行完成后,再从任务队列中取出异步任务的回调函数,添加到调用栈中执行。所有的异步任务都是由事件循环机制来控制它们的执行时机和顺序。

宏任务和微任务都属于异步任务的一种,它们的区别在于任务队列不同,执行的时机也不同。

宏任务(Macro Task):
宏任务指的是那些需要长时间运行的任务,例如 I/O 操作、setTimeout 和 setInterval 等。每个宏任务执行完成后,都会清空微任务,然后从宏任务队列中取出下一个任务执行。

微任务(Micro Task):
微任务指的是那些需要尽可能快速执行的任务,例如 Promise 的 resolve 方法、MutationObserver 等。当每个宏任务执行完毕并清空微任务队列,会接着执行当前微任务队列中的任务,直到执行完毕为止。

事件循环机制是先执行当前宏任务中的所有同步代码,再去取宏任务队列中队首的宏任务执行,当遇到微任务时,将其全部取出来按照顺序执行完,在执行下个宏任务。

简单来说,宏任务与微任务的区别在于它们的执行顺序和优先级,宏任务的优先级低于微任务,因为宏任务需要等待当前的同步任务执行完成后才会执行,而微任务则是直接进入微任务队列中等待执行。在使用异步任务时,可以根据需要将任务分为宏任务和微任务,以便更好地管理异步代码的执行顺序和优先级。

标签:异步,调用,函数,队列,任务,循环,事件,机制,执行
From: https://www.cnblogs.com/kitebear/p/17400025.html

相关文章

  • QAbstractEventDispatcher 抽象事件分发类
     QAbstractEventDispatcherQAbstractEventDispatcher是一个抽象事件分发类,提供了一个事件循环,并将事件分发给相应的对象。主要职责有:1.管理一个事件循环,接收各种事件并分发2.提供注册,注销事件等接口3.处理定时器,到期后触发timeout信号4.处理异步信号连接,将其包装为事件......
  • 博学谷学习记录 自我总结 用心分享 | Dubbo SPI机制
    SPI简介SPI全称为ServiceProviderInterface,是一种服务发现机制,刚好与javajdk的类加载机制进行了一个互补。SPI的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易......
  • MATLAB代码:考虑阶梯型碳交易机制与电制氢的综合能源系统热电优化,CPLEX+Yalmip求解
    MATLAB代码:考虑阶梯型碳交易机制与电制氢的综合能源系统热电优化,CPLEX+Yalmip求解主要内容:双碳”背景下,为提高能源利用率,优化设备的运行灵活性,进一步降低综合能源系统(IES)的碳排放水平,提出一种IES低碳经济运行策略。首先考虑IES参与到碳交易市场,引入阶梯式碳交易机制引导IES控制碳......
  • 【❂Java集合】循环链表和双向链表的区别是是什么
    最后一个结点指针指向不同在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是像双向链表那样置为NULL。此种情况还用于在最后一个结点后插入一个新的结点。判断链域值不同在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到......
  • C基础笔记(for循环语句)
    循环之for语句从目一开始,连续不断做一件事,叫循环语法:for(表达式1(赋值语句初值);表达式2(条件);表达式3(增值的赋值语句)){ 循环要做的事(一次或多次)} #include<stdio.h>intmain(){ for(inti=1;i<=100;i++) { printf("%d\n",i); } retur......
  • GWO-GRU多变量回归预测,灰狼算法优化门控循环单元的回归预测(Matlab)
    GWO-GRU多变量回归预测,灰狼算法优化门控循环单元的回归预测(Matlab)1.data为数据集。2.MainGWO_GRUNN.m为程序主文件,其他为函数文件无需运行。3.命令窗口输出R2、MAE和MBE。4.灰狼算法优化参数为学习率,隐藏层节点个数,正则化参数。ID:4929695080564332......
  • SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测(Matlab)
    SSA-CNN-GRU麻雀算法优化卷积门控循环单元时间序列预测(Matlab)所有程序经过验证,保证有效运行。可有偿替换数据及其他服务。2.输入数据为单变量时间序列数据,即一维数据;3.运行环境Matlab2020b及以上,data为数据集,运行主程序SSA-CNN-GRUTS,其余为函数文件无需运行,所有程序和数据放在一个......
  • Nacos Client 源码分析(三)回调机制
    文本使用的Nacos版本为2.2.21.概述通过前两篇文章,我们已经大致了解了NacosClient的服务订阅流程以及EventListener的回调机制。然而,NacosClient对配置信息的变更的监听,并没有采用和服务订阅相同的基于事件的发布订阅模式,而是使用了另一种监听机制。下面进行简要分......
  • PSO-GRU多变量回归预测,粒子群优化门控循环单元(Matlab) 所有程序
    PSO-GRU多变量回归预测,粒子群优化门控循环单元(Matlab)所有程序经过验证,保证有效运行。1.data为数据集,输入7个特征,输出一个变量。2.PSO_GRU.m为程序主文件,fitness为函数文件无需运行。3.命令窗口输出R2、MAE和RMSE。4.粒子群优化门控循环单元,优化隐含层单元数量和初始学习率。注......
  • GRU门控循环单元分位数回归多输入单输出(Matlab) 1.输入多个特
    GRU门控循环单元分位数回归多输入单输出(Matlab)1.输入多个特征,输出单个特征,分位数回归,区间预测2.运行环境matlab2020b所有程序经过验证,保证有效运行。ID:4550689183878920......