【JavaScript】线程和进程,JavaScript线程,事件队列,事件循环 ,微任务、宏任务

news/2024/10/22 9:16:53/

❤️ Author: 老九
☕️ 个人博客:老九的CSDN博客
🙏 个人名言:不可控之事 乐观面对
😍 系列专栏:

文章目录

  • 进程和线程
  • JavaScript线程
    • 事件队列、事件循环
    • 微任务、宏任务
      • 面试题1
      • 面试题2

进程和线程

  • 进程:计算机已经运行的程序,使操作系统管理程序的一种方式
  • 线程:操作系统能够运行运算调度的最小单位,通常情况下被包含在进程中
  • 那么操作系统使如何做到同时让多个进程同时工作的?
    这是因为CPU的运算速度非常快,它可以快速的在多个进程之间迅速的切换;当我们进程中的线程获取到时间片时,就可以快速执行我们编写的代码,对于用于来说是感觉不到的

JavaScript线程

  • JavaScript是单线程的(但是可以开启Workers),但是JavaScript的线程有自己的容器进程:浏览器或者Node
  • 目前多数的浏览器都是多线程的,当我们打开一个tab页面时就会开启一个新的进程,这是为了防止一个页面卡死而造成所有页面无法相应,整个浏览器需要强制退出;
  • 每个进程中又有很多的线程,其中包括执行JavaScript代码的线程,JavaScript代码执行是在一个单独的线程中执行的,这就意味着JavaScript代码在同一时刻只能做一件事,如果这件事是非常耗时的,当前的线程就会被阻塞
  • 所以真正的耗时的操作,实际上并不是由JS线程在执行的,浏览器的每个进程是多线程的,在其他线程可以完成这个耗时的操作,比如网络请求,定时器

事件队列、事件循环

  • 如果我们在执行JS代码中,有异步操作,比如中间插入了一个setTimeout函数时候,这个函数会被放入调用栈中,执行会立即结束,并不会阻塞后续代码的执行,而当所有的代码都执行完毕之后(全局执行上下文调用栈为空时),setTimeout中的回调函数会被浏览器依次放在事件队列中,然后出队列在调用栈中执行
    在这里插入图片描述

微任务、宏任务

  • setTimeout,setInterval,ajax,DOM监听等这种任务是宏任务,浏览器将他们加入到宏任务队列,Promise中then后面的函数是微任务,浏览器将他们加入到微任务队列
  • 这里我们需要保证在执行任何一个宏任务之前,我们必须保证微任务队列是清空的

面试题1

在这里插入图片描述

面试题2

  • 注意,如果有await的话,await后面的函数会立即调用,但是当遇到resolve或者reject的时候,就会调用.then或者.catch,这时候就要先加入到微任务里,等待全局执行上下文都完成后再执行微任务
    在这里插入图片描述

————————————————————————
♥♥♥码字不易,大家的支持就是我坚持下去的动力♥♥♥
版权声明:本文为CSDN博主「亚太地区百大最帅面孔第101名」的原创文章


http://www.ppmy.cn/news/75230.html

相关文章

Ceres简介及示例(8)On Derivatives(Analytic Derivatives)

考虑以下曲线(Rat43) 的拟合问题: y b 1 ( 1 e b 2 − b 3 x ) 1 / b 4 y \frac{b_1}{(1e^{b_2-b_3x})^{1/b_4}} y(1eb2​−b3​x)1/b4​b1​​ 也就是说,给定一些数据 { x i , y i } , ∀ i 1 , . . . , n \{x_i, y_i\},\ \forall i1,... ,n {xi​,yi​}, ∀…

小红书数据分析:如何用ChatGPT输出爆文笔记

ChatGPT的热度依旧不减,随着技术升级,越来越多更高级的玩法被发掘。今天我们就来聊聊,如何用ChatGPT写出小红书风格的文章。 首先,小红书笔记制作分为两个步骤: 1、找选题 2、写小红书风格的笔记 我们用例子说话&a…

SQL执行过程

1. select 语句执行过程 一条 select 语句的执行过程如上图所示 1、建立连接 连接器会校验你输入的用户名和密码是否正确,如果错误会返回提示,如果正确,连接器会查询当前用户对于的权限。连接器的作用就是校验用户权限 2、查询缓存 MySQL…

17.plantUML画类图的语法、组合关系和聚合关系之间的区别

文章目录 plantUML画类图的语法组合关系和聚合关系之间的区别依赖关系和关联关系的区别一个类图语法示例 plantUML画类图的语法 泛化关系就是继承关系 语法解释&#xff1a;<|-- 表示组合&#xff0c;<|-表示继承 表示 public&#xff0c; #表示protect - 表示 private…

新华三发布绿洲平台3.0,五大能力升级,构筑坚实用数底座

当前我国数字经济飞速发展&#xff0c;据中国信息通信研究院发布的《中国数字经济发展研究报告&#xff08;2023年&#xff09;》显示&#xff0c;2022年&#xff0c;我国数字经济规模达到50.2万亿元&#xff0c;同比名义增长10.3%&#xff0c;已连续11年显著高于同期GDP名义增…

阿里国际数字商业持续增长背后,蒋凡正在经历“考验”

出品 | 何玺 排版 | 叶媛 5月18日&#xff0c;阿里巴巴集团发布2023财年第四季度及全年业绩。财报显示&#xff0c;2023财年阿里总收入8686.87亿元&#xff08;合1264.91亿美元&#xff09;&#xff0c;同比增长了2%&#xff1b;经营收入为人民币1003.51亿元合14,612百万美元&…

深入探索SDL游戏开发

前言 欢迎来到小K的SDL专栏第二小节&#xff0c;本节将为大家带来基本窗口构成、渲染器、基本图形绘制、贴图、事件处理等的详细讲解&#xff0c;看完后希望对你有收获 文章目录 前言一、简单窗口二、渲染器三、基本图形绘制1、点2、线3、矩形4、圆和椭圆 四、贴图五、事件处理…

手把手教你接入网站微信支付

文章目录 为何需要接入微信支付&#xff1f;申请微信公众号申请商户号Java SDK代码示例支付流程Native API的使用示例支付结果通知 第三方支付平台相关法规相关链接支付宝支付接入 为何需要接入微信支付&#xff1f; 小摊小贩们在线下交易一般无需接入微信支付&#xff0c;只需…