浏览器工作原理学习(十三)

news/2024/7/6 6:33:27

消息队列和事件循环系统

  1. 消息队列
  • 消息队列是一种数据结构,可以存放要执行的任务。它符合队列先进先出的特点。
  • IO线程中的产生的新任务会添加进消息队列尾部。
  • 渲染主线程会循环地从消息队列头部中读取任务,执行任务。
  • 由于多个线程操作同一个消息队列,所以在添加任务和取出任务时还会加上一个同步锁。
  • 渲染进程专门有一个IO线程用来接收其他进程传进来的消息,接收到消息后,会将这些消息组成任务发送渲染主线程。
  • 消息队列中的任务类型:输入事件、微任务、文件读写、webSocket、JS定时器、JS执行、解析DOM、样式计算、布局计算、CSS动画。
  1. 如何处理高优先级的任务
  • 观察者模式:设计一套监听接口,当发生变化时,渲染引擎同步调用这些接口。
  • DOM发送变化时,采用同步通知的方式会影响当前任务的执行效率;采用异步方式,又会影响到监控的实时性,为此微任务诞生。
  • 消息队列中的任务被称为宏任务,每个宏任务都包含一个微任务队列。在执行宏任务的过程中,如果DOM有变化,那么该变化添加到微任务列表中,这样就不会影响到宏任务的执行。
  1. 如何解决单个任务执行时长过久问题
  • 通过回调功能来规避这种问题,也就是让要执行的JS任务滞后执行。
  1. 事件循环系统
  • 循环机制:在线程语句最后添加一个for循环语句,线程会一直循环执行。
  • 引入事件:在线程运行过程中,等待事件触发时,线程处于暂停状态,事件发生后,线程会被激活,然后输出事件执行结果。

http://www.niftyadmin.cn/n/2608621.html

相关文章

浏览器工作原理学习(十四)

WebAPI:setTimeout 浏览器中的setTimeout 执行一段异步任务,需要先将任务添加到消息队列中。为了保证回调函数能在指定时间内执行,定时任务的回调函数不能直接添加到消息队列。延迟队列:维护消息队列中需要延迟执行的任务列表。如果当前任务…

(牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)

假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa,aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx,yyyy 其中a的Index为0&…

浏览器工作原理学习(十五)

微任务与宏任务 宏任务 为了协调任务在主线程上执行,页面进程引入消息队列和事件循环机制,渲染进程内部会维护多个消息队列,主线程从这些任务队列中取出任务执行,这写消息队列种的任务称为宏任务。 微任务 第一种:把…

django markdown

1. 编辑器 css 1 <link rel"stylesheet" href"{% static plugin/editor.md/css/editormd.css %}"> div 1 <div id"editormd" class"col-md-10 text-left"> 2 <textarea name&…

浏览器工作原理学习(十六)

请求陷入排队的几种情况 页面中的资源是有优先级的&#xff0c;比如CSS、HTML、JS等哦都是页面中的核心文件&#xff0c;所以优先级最高。而图片、视频、音频这类资源就不是核心资源&#xff0c;优先级就比较低&#xff0c;通常当后者遇到前者时&#xff0c;就需要让路&#x…

tidb 架构 ~Tidb学习系列(1)

一 简介:今天来研究Tidb 二 安装测试: 0 下载Tidb wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz 按如下步骤依次启动PD, TiKV, TiDB 1 启动pd 这里如果无法启动,大概率是2379端口被占用,极大可能是redis服务 nohup ./bin/pd-server --data-dirpd --lo…

在CentOS-6.9里安装openvswitch-2.5.4

第一步&#xff1a;安装依赖yum install rpm-build openssl-devel gcc wgetyum install python-devel kernel-devel kernel-debug-devel libtool第二步&#xff1a;下载包wget -O /root/rpmbuild/SOURCES/openvswitch-2.5.4.tar.gz http://openvswitch.org/releases/openvswitc…

浏览器工作原理学习(十七)

显示器是如何显示图像的 每个显示器都有固定的刷新频率&#xff0c;通常是60HZ&#xff0c;也就是每秒更新60张图片&#xff0c;更新的图片都来自于显卡中一个叫前缓冲区的地方&#xff0c;显示器就是每秒固定读取60次前缓冲区中的图像&#xff0c;并将读取的图像显示到显示器…