当前位置: 首页 > news >正文

如何理解事件循环和JS的异步?

事件循环(消息循环)

1.在最开的时候,渲染主线程会进入到一个无限循环中。

2.每一次循环主线程都会检查MQ中是否存在任务。如果有,就取出第一个任务执行,执行完一个后进入下一次循环;如果没有,则进入休眠状态。

3.其他所有线程(包括其他进程的线程)可以随时向MQ中添加任务。新任务会被添加到MQ的末尾,在添加新任务时,如果主线程处于休眠状态,则会将其唤醒以继续循环拿去任务。

整个过程被称之为事件循环,也叫消息循环。

JS的异步

JS是一门单线程的语言。这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个。渲染主线程承担着诸多工作,渲染页面、执行JS都在其中运行。

如果采用同步的方式,就极有可能导致渲染主线程产生阻塞,从而导致消息队列中的很多其他任务无法得到执行。这样一来,一方面会导致繁忙的渲染主线程白白消耗时间,另一方面导致页面无法及时更新,给用户造成卡死现象。

所以浏览器采用异步的方式来避免。具体做法是当某些任务发生时,比如:计时器、网络通信、事件监听。主线程会将这些任务交给其他线程去处理,自身立即结束任务的执行,转而执行后续代码。当其他线程完成时,会将事先传递的回调函数包装成任务,加入到消息队列的末尾排队,等待主线程调度执行

在这种异步模式下,浏览器永不阻塞,从而最大限度保证了单线程的流畅执行。

http://www.lryc.cn/news/623908.html

相关文章:

  • Oracle查看历史会话信息视图介绍
  • 深入理解QFlags:Qt中的位标志管理工具
  • Springboot项目3种视图(JSP、Thymeleaf、Freemarker)演示
  • 【SpringBoot】SpringBoot的异步任务、邮件发送、定时任务
  • Spring Bean 的生命周期:从创建到销毁的完整旅程​
  • 好看的个人导航系统多模板带后台
  • React端到端测试
  • 通达信【牛股妖股埋伏】副图+选股指标
  • Shell脚本-while循环应用案例
  • nn.Module模块介绍
  • 计算机视觉(一):nvidia与cuda介绍
  • OpenMemory MCP发布!AI记忆本地共享,Claude、Cursor一键同步效率翻倍!
  • 【Linux】文件基础IO
  • Agent开发进阶路线:从基础响应到自主决策的架构演进
  • Python使用数据类dataclasses管理数据对象
  • 【C2000】C2000例程使用介绍
  • Python进行中文分词
  • MySQL定时任务详解 - Event Scheduler 事件调度器从基础到实战
  • Blender模拟结构光3D Scanner(二)投影仪内参数匹配
  • 火狐(Mozilla Firefox)浏览器离线安装包下载
  • 学习Python中Selenium模块的基本用法(5:程序基本步骤)
  • Python数据类型转换详解:从基础到实践
  • Python 基础语法(二)
  • 0️⃣基础 认识Python操作文件夹(初学者)
  • Linux:TCP协议
  • RK3568平台开发系列讲解:PCIE trainning失败怎么办
  • 深入解析函数指针及其数组、typedef关键字应用技巧
  • 0-12岁幼儿启蒙与教育
  • CF2121C Those Who Are With Us
  • 2001-2024年中国玉米种植分布数据集