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

❤️ 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名」的原创文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/22408.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Netty核心技术二--BIO编程

1. I/O模型 I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能 Java共支持3种网络编程模型/IO模式:BIO、NIO、AIO Java BIO :同步并阻塞(传统阻塞型),服务器实现模式为一个…

C++13-STL模板

C13-STL模板 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 大纲要求 【 3 】算法模板库中的函数:min、max、swap、sort 【 4 】栈 (stack)、队列 (queue)、链表 (list)、 向量(vector)等容器 1.函数模板 泛…

1.2 IAR 环境配置及编译

目录 一. 新建源码文件夹 二. 添加源文件到工程中 三. 编写一个简单的测试程序 四. 设置字体和行号 五. 工程配置 六. 编译链接工程 一. 新建源码文件夹 (1)在保存工作空间和工程的目录下,新建一个code文件夹,用于保存源码&…

突破极限:YOLO9000 论文解读 - 构建更好、更快、更强大的实时检测系统

YOLOv2 论文全篇完整翻译 摘要 我们介绍了YOLO9000,这是一种先进的、实时的目标检测系统,可以检测超过9000个物体类别。首先,我们对YOLO检测方法进行了各种改进,包括新颖的方法和借鉴自先前工作的方法。改进后的模型YOLOv2在标准…

实验四 车辆定位导航

有想自己动手的同学可在末尾看教程 【实验目的】 1、了解全球定位导航系统的定位原理和电子地图技术,掌握电子地图API使用方法。 2、了解导航数据报文数据格式,解析导航数据并在电子地图上进行导航应用。 【实验性质】 验证性实验。 【实验要求】 1、相…

自抗扰PID(梯形图源代码)

有关ADRC的详细算法和源代码,请参看专栏的系列文章,这里不再赘述,常用链接如下: ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法_RXXW_Dor的博客-CSDN博客PLC的自抗扰控制(ADRC)算法_RXXW_Dor的博客-CSDN博客_adrc算法1、自抗扰控制算法,网上很多文章有所…

数据仓库漫谈-前世今生

数据仓库的内容非常多,每一个子模块拎出来都能讲很久。这里没法讲太多细节,大致思考了三个备选议题: 数据仓库的前世今生 数据仓库体系知识介绍 数仓开发者的路在何方? 既然是第一次分享,感觉还是跟大家普及下数仓的…

浏览器数据存储方式

浏览器数据存储方式 常用的前端数据存储方法笼统来说有 3 种: local/session storagecookiesindexeddb 3 种方法各有各的优点和使用范围。 local/session storage local/session storage 保存的格式都为键值对,并且用法都是差不多,如下&…

『树莓派云台机器人』02. 电脑连接树莓派 配置开发环境

目录 1. 下载ssh交互工具 Xshell 与XFTP(有过相关使用经历的朋友可以跳过这一节内容)2. 下载VNC远程控制工具软件3. 连接过程4. Xshell 命令工具5. XFTP 文件传送工具6. 关于联网总结 欢迎关注 『树莓派云台机器人』 博客,持续更新中 欢迎关注…

基于Zynq的雷达10Gbps高速PCIE数据采集卡方案(三)软件设计

4.1 引言 本章基于第二章的分析结论,进行系统软件设计。软件设计包括逻辑设计、嵌入 式软件设计和上位机软件设计。在逻辑设计中,对 ADC 模块、 Aurora 模块、 DDR3 SDRAM 模块和 PCIE 模块进行分析和设计,在 Vivado 软件提供的 …

在 Linux 上使用 yuzu 模拟 Nintendo Switch 试玩王国之泪

王国之泪5月12日发售,DLC 玩家已经造出各种脑洞大开的东西了,但是买的卡带迟迟没有收到,因此,打算使用 yuzu 模拟器先体验一下 yuzu 是一款开源的 Ninetendo Switch 模拟器,支持在 Linux 或者 Windows 平台运行&#…

vue动态class的写法

本文会详细介绍 vue动态 class的写法,并且提供一些我个人的理解,希望对你有所帮助。 如果你是一个新手,或者想了解 vue的源码,那么首先应该学习 vue的基础知识,比如:什么是静态语言,有什么作用等…

JQuery原理剖析——自己手写简易版JQuery

知其一后知其二; 目录 为什么需要JQuery jQuery的概念: 在此之前回顾JavaScript对象知识: 自己手写的简易JQuery: 为什么需要JQuery 在我们之前写的JS代码中经常会遇见document.getElementById等等获取元素的对象&#xff0c…

Apache Kafka - 重识Kafka生产者

文章目录 概述Kafka 生产者Kafka 生产者工作原理如何使用 Kafka 生产者 生产者配置项(核心)导图总结 概述 Kafka 生产者是 Apache Kafka 中的一个重要组件,它负责将数据发送到 Kafka 集群中。在实时数据处理和流式处理应用程序中&#xff0c…

OKR是什么意思啊

一、OKR是什么意思? OKR是"Objective and Key Results"的缩写,即目标和关键结果。它是一种目标管理框架,旨在帮助组织和团队设定明确的目标,并通过关键结果来衡量和追踪目标的实现情况。 为了让大家快速了解什么是OKR…

Doxygen 源码分析: QCString类

2023-05-20 23:41:56 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 1. Doxygen 版本2. QCString 类概览3. QCString 特殊成员函数3.1 default 方式的构造函数3.2 单个参数和两个参数的构造函数 4. inline方式实现的成员函数4.1 operator 函数4.…

SQL执行过程

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

面试字节,过关斩将直接干到 3 面,结果被吊打了?

人人都有大厂梦,对于软件测试员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让…

【自然语言处理】 - 作业1: Word2Vec及TransE实现

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

[CTF/网络安全] 攻防世界 view_source 解题详析

[CTF/网络安全] 攻防世界 view_source 解题详析 查看页面源代码方式归类总结 题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。 查看页面源代码方式归类 单击鼠标右键,点击查看页面源代码: …