浏览器的进程和线程

news2024/9/29 7:29:09

浏览器是多进程多线程的应用程序

浏览器进程

主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。
网络进程
负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。
渲染进程
渲染进程启动后,会开启一个染主线程,主线程负责执行 HTML、CSS、JS 代码默认情况下,浏览器会为每个标签页开启一个新的渲染进程,以保证不同的标签页之间不相互影响。

线程

一个进程里面可以有多个线程
这里我们主要研究的是渲染进程
一个标签一个进程
在这里插入图片描述

js的事件循环

事件循环又叫做消息循环,是浏览器渲染主线程的工作方式。在Chrome 的源码中,它开启一个不会结束的 for 循环,每次循环从消息队列中取出第一个任务执行,而其他线程只需要在合适的时候将任务加入到队列末尾即可。过去把消息队列简单分为宏队列和微队列,这种说法目前已无法满足复杂的浏览器环境,取而代之的是一种更加灵活多变的处理方式。根据 W3C官方的解释,每个任务有不同的类型,同类型的任务必须在同一个队列,不同的任务可以属于不同的队列。不同任务队列有不同的优先级,在一次事件循环中,由浏览器自行决定取哪一个队列的任务。但浏览器必须有一个微队列,微队列的任务一定具有最高的优先级,必须优先调度执行。

JS 中的计时器能做到精确计时吗? 为什么?

不行,因为:
计算机硬件没有原子钟,无法做到精确计时
操作系统的计时函数本身就有代最偏差s JS 的计时器最终调用的是操作系统的函数,也就携带了这些偏差
按照 W3C的标准,浏览器实现计时器时,如果嵌套层级超过 5 层,则会带有 4 毫秒的最少时间,这样在计时时间少于4毫秒时又带来了偏差
受事件循环的影响,计时器的回调函数只能在主线程空闲时运行,因此又带来了偏差

如何理解js的异步

JS是一门单线程的语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个并且渲染主线程承担着诸多的工作,渲染页面、执行 JS 都在其中运行。如果使用同步的方式,就极有可能导致主线程产生阻塞,从而导致消息队列中的很多其他任务无法得到执行。这样一来,一户面会导致繁忙的主线程白白的消耗时间,另一方面导致页面无法及时更新,给用户造成卡死现象。
所以浏览器采用异步的方式来避免。具体做法是当某些任务发生时,比如计时器、网络、事件监听,主线程将任务交给其他线程去处理,自身立即结束任务的执行,转而执行后续代码。当其他线程完成时,将事先传递的回调函数包装成任务,加入到消息队列的末尾排队,等待主线程调度执行。在这种异步模式下,浏览器永不阻塞,从而最大限度的保证了单线程的流畅运行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macOS 13.4正式版(22F66)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 原文地址:http://www.imacosx.cn/113625.html 完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直…

java boot项目基础配置之设置启动端口

因为 springboot 项目是一个内嵌的tomcat 那么 我们就来研究一下 怎么改它的启动端口 其实 它的配置 还是非常多的 我们基础部分讲一下 后面 到实用部分 再一边用 一边再看一些 首先 我们如果不设置 他就会占用 我们的 8080端口 那么 我们最好就直接用 80端口 就不用输入端口…

【滤波】卡尔曼滤波数学

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第7章节07-Kalman-Filter-Math(卡尔曼滤波数学)。 %matplotlib inline#format the book import book_format book_format.set_style()简介 如果你已经学习到了这一步,我希望你…

vue基础知识一:说说你对vue的理解?

一、从历史说起 Web是World Wide Web的简称,中文译为万维网 我们可以将它规划成如下的几个时代来进行理解 石器时代 文明时代 工业革命时代 百花齐放时代 石器时代 石器时代指的就是我们的静态网页,可以欣赏一下1997的Apple官网 最早的网页是没有数据库…

day1 IO 模型

目录 基本概念 同步和异步 阻塞和非阻塞 线程在运行过程中,可能由于以下几种原因进入阻塞状态: 可能阻塞套接字的Linux Sockets API调用分为以下四种 五种 I/O 模型 阻塞I/O 非阻塞I/O ​编辑 I/O多路复用模型 信号驱动式I/O模型 异步I/O 模型 …

网络模块封装

网络模块封装 library-network模块配置依赖一.自定义LiveDataCallAdapterFactory1.定义ApiResponse返回的数据类型2.LiveDataCallAdapter.kt3.LiveDataCallAdapter.kt 二.自定义CustomGsonConverterFactory三.拦截器1.HeaderInterceptor请求头拦截器2.BasicParamsInterceptor参…

Android - 内容提供者(Content Provider) 使用

Android - 内容提供者(Content Provider) 内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。这些请求由类 ContentResolver 的方法来处理。内容提供者可以使用不同的方式来存储数据。数据可以被存放在数据库,文件,甚至是网络。 有时候需…

Python如何进行性能测试?(Locust对接口进行压测)

python如何进行性能测试呢?其实原理就是对于接口进行加线程,打个比方就是当你有一个电梯,你同时可以搭载多少个人坐电梯那这个人数就是这部电梯的其中一个性能指标,那么对于接口来说每秒钟能有多少人成功发起请求后得到成功的响应…

QT 学习笔记2 信号与槽

上次做的界面,并没有逻辑。你点击按钮,并不会执行什么 要想其能作出反映,就不得不提到一个很重要的机制---信号与槽 当我们点击确定的时候,按钮会发出一个信号 点击确定的时候,会执行一段代码,这段程序就…

Ada 语言学习(3)复合类型数据——Array

文章目录 Array数据类型声明数组索引数组范围数组复制数组初始化直接赋值通过拷贝赋值不同索引范围但长度相等非指定类型边界收缩 多维数组数组遍历数组切片访问和动态检查直接访问动态检查 数组字面量 Array literal数组拼接两个数组拼接数组和单个值拼接 Array Equality&…

机器学习平台 PAI 支持抢占型实例,模型服务最高降本 90%

助力模型推理服务降本增效,适用于推理成本敏感场景,如:AIGC 内容生成异步推理、批量图像处理、批量音视频处理等。 在 AI 开发及服务不断追求效率的背景下,阿里云机器学习平台 PAI 宣布支持抢占型实例(Spot Instance&a…

2023逆向分析代码渗透测试flag0072解析(超详细)

一、竞赛时间 180分钟 共计3小时 1.从靶机服务器的FTP上下载flag0072,分析该文件,请提交代码保护技术的类型。提交格式:XXXX。 2.提交被保护的代码所在地址。提交格式: 0xXXXX。 3.提交代码解密的密钥。提交格式: 0xXX。 4.请提交输入正确flag时的输出。提交格式: XXXX。…

Python入门(十二)while循环(二)

while循环(二) 1.使用while循环处理列表和字典2.在列表之间移动元素3.删除为特定值的所有列表元素4.使用用户输入来填充字典 作者:xiou 1.使用while循环处理列表和字典 到目前为止,我们每次都只处理了一项用户信息:获…

建站教程:腾讯云轻量服务器安装宝塔面板搭建网站流程

腾讯云轻量应用服务器镜像选择宝塔Linux面板,然后在宝塔面板上安装LNMP网站所需的Web环境,在宝塔面板上新建站点,上床网站程序安装包到根目录,并安装网站全流程。腾讯云百科来详细说下腾讯云轻量应用服务器搭建网站全流程&#xf…

百果园ESG:围绕“好吃”二字,勾勒水果行业未来蓝图

当一场可持续绿色变革开始,ESG(环境、社会与治理)已经成为企业发展战略的重要组成部分。 然而,如何实现ESG和企业发展的协同却是一大问题。根据毕马威《2022年中国首席执行官展望》,一些企业家也表示ESG投资对提升财务…

SpringBoot配置文件3种格式、配置文件读取方式、多环境配置、配置文件优先级分类

文章目录 1 配置文件格式1.1 环境准备1.2 不同配置文件演示1.3 三种配合文件的优先级 2 yaml格式2.1 语法规则 3 yaml配置文件数据读取3.1 环境准备3.2 读取配置数据方式1 使用 Value注解方式2 Environment对象方式3 自定义对象 4 多环境配置4.1 yaml文件4.2 properties文件4.3…

H.265/HEVC编码原理及其处理流程的分析

H.265/HEVC编码原理及其处理流程的分析 H.265/HEVC编码的框架图,查了很多资料都没搞明白,各个模块的处理的分析网上有很多,很少有把这个流程串起来的。本文的主要目的是讲清楚H.265/HEVC视频编码的处理流程,不涉及复杂的计算过程。…

自定义线程池 ThreadPoolExecutor

ThreadPoolExecutor 自定义线程池 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultT…

Arduino ESP8266+RC522+阿里云 物联网入户控制RFID门禁系统

前言 根据项目结课报告改编而成&#xff0c;可能更适合作为一份文档而不是一篇记录类型的博客&#xff0c;没有留存接线图和运行图片&#xff0c;感到抱歉。 使用的板子是YwRobot的ESP8266板子&#xff0c;使用Arduino IDE开发&#xff0c;用到了舵机、按钮、人体感应传感器、…

Unity UI -- (4)用图像创建菜单背景

添加一个基础的设置菜单背景 设置菜单的元素会安放在一个简单的矩形区域上。我们用一个Image对象来创建这个矩形。 1. 首先&#xff0c;我们暂时停用Title Text和Settings Button游戏物体。这样会让我们的Canvas看起来更清爽。 2. 在Hierarchy中&#xff0c;点击右键&#xff0…