当前位置:网站首页>js单线程及事件循环、宏任务和微任务
js单线程及事件循环、宏任务和微任务
2022-08-03 13:11:00 【weixin_46051260】
为什么js是单线程
javascript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。
javascript的单线程与其用途有关,作为浏览器的脚本语言,javascript主要用途是与用户互动,
以及操作dom,这就决定了他只能是单线程,否则会带来很复杂的同步问题。
比如,假定javascript同时有两个线程,一个线程在某个Dom节点上添加内容,另一个线程
删除了这个节点,这时浏览器应该以哪个线程为准?
所以,为了避免复杂性,从一诞生,javascript就是单线程,这已经成了这门语言的核心特征,
将来也不会改变
事件循环机制
消息队列::消息队列是一个先进先出的队列,他里边存放着各种信息
事件循环:事件循环是指主线程重复从消息队列中取消息、执行的过程
实际上,主线程只会做一件事情,就是从消息队列里面取消息、执行消息,再取消息、再执行。
当消息队列为空时,就会直到消息队列变成非空,而且主线程只有将当前的消息执行完成后,
才会去取下一个消息。这种机制就叫做事件循环机制,取一个消息并执行的过程叫做依次循环。

上图大致描述就是:
- 主线程运行时会产生执行栈,栈中的代码调用某些api时,他们会在事件队列中加各种事件(当满足触发条件后,执行)
- 而栈中的代码执行完毕,就会读取事件队列中的事件,去执行那些回调
- 如此循环
注意,总是要等待栈中的代码执行完毕后才会读取事件队列中的事件
事件队列中的宏任务与微任务
执行流程:
宏任务执行之前,要保证所有微任务是清空的,宏任务1执行完,执行下一个宏任务2,但是该宏任务2里要是有微任务,则执行完微任务,再去执行该宏任务2,以此类推

边栏推荐
- 4年工作经验,多线程间的5种通信方式都说不出来,你信吗?
- Real number rounding and writing to file (C language file)
- 背后的力量 | 提升医疗服务“速度“和“温度” 华云数据助力上海国际医学中心加速智慧医院建设
- Classes and objects (upper)
- When Nodejs installation depends on cpnm, the install shows Error: Cannot find module 'fs/promises'
- An动画基础之散件动画原理与形状提示点
- 来广州找工作有一个多月了,今天终于有着落了,工资7000
- An动画优化之补间形状与传统补间的优化
- The maximum number of sliding window
- TiFlash 计算层概览
猜你喜欢

短视频的头号玩家:抖音产品体验报告

中国手机品牌争论谁是国内第一,而它已成为中国手机在海外的代表

华云数据张华林:投身数字蓝海 绘就云上强国

Jmeter使用

【蓝桥杯选拔赛真题48】Scratch跳舞机游戏 少儿编程scratch蓝桥杯选拔赛真题讲解

An工具介绍之钢笔工具、铅笔工具与画笔工具

An工具介绍之骨骼工具
![[Blue Bridge Cup Trial Question 48] Scratch Dance Machine Game Children's Programming Scratch Blue Bridge Cup Trial Question Explanation](/img/4c/b41d64c13d6903aa38cc46dea44519.png)
[Blue Bridge Cup Trial Question 48] Scratch Dance Machine Game Children's Programming Scratch Blue Bridge Cup Trial Question Explanation

IronOS, an open source system for portable soldering irons, supports a variety of portable DC, QC, PD powered soldering irons, and supports all standard functions of smart soldering irons

Nanoprobes FluoroNanogold 偶联物的特色和应用
随机推荐
标题 node第一个服务器程序
PyTorch framework to train linear regression model (CPU and GPU environment)
ITSM软件与工单系统的区别是什么?
保健用品行业B2B电子商务系统:供采交易全链路数字化,助推企业管理精细化
[Blue Bridge Cup Trial Question 48] Scratch Dance Machine Game Children's Programming Scratch Blue Bridge Cup Trial Question Explanation
ECCV 2022|通往数据高效的Transformer目标检测器
An动画基础之元件的影片剪辑效果
Forrester:行业云帮助中国企业更快适应未来的发展
易观分析:2022年Q2中国网络零售B2C市场交易规模达23444.7亿元
使用百度EasyDL实现施工人员安全装备检测
Golang 数组和切片
365天挑战LeetCode1000题——Day 048 有序队列 脑筋急转弯
leetcode 11. The container that holds the most water
类和对象(中上)
Nodejs 安装依赖cpnm时,install 出现Error: Cannot find module ‘fs/promises‘
How to disable software from running in the background in Windows 11?How to prevent apps from running in the background in Windows 11
农产品企业如何进行全网营销?
GameFi industry down but not out | June Report
leetcode16最接近的三数之和 (排序+ 双指针)
Postman插件下载