彻底理解浏览器的进程与线程

彻底理解浏览器的进程与线程

  • 什么是进程和线程,两者的区别及联系
  • 浏览器的进程和线程总结
    • 浏览器核心进程有哪些
    • 浏览器进程与线程相关问题

什么是进程和线程,两者的区别及联系

进程和线程是操作系统中用于管理程序执行的两个基本概念
  1. 进程的定义及理解

    定义:进程是资源分配的基本单位,它是程序执行时的一个实例,即:进程就是内存中正在运行的应用程序。

    • 在程序运行时,系统会创建一个进程,并为它分配资源,然后将该进程放入进程就绪队列进程调度器选中它时,就会为它分配CPU时间,程序开始真正运行。
    • 进程拥有独立的地址空间,包括代码空间、数据空间和堆栈空间,每个进程所拥有的数据和变量只属于它自己。进程是作为资源申请和调度单位存在的,具有动态性、并发性、独立性、异步性和结构性等特征。
    • 进程的生命周期包括创建、活动、暂停、终止等过程,是动态的产生、变化和消亡的。
  2. 线程的定义及理解

    定义:线程是程序执行的最小单位,也是进程的一个执行流。线程是CPU调度和分派的基本单位,一个进程可以由很多个线程组成。

    • 线程间共享进程的所有资源,每个线程有自己的堆栈局部变量。线程由CPU独立调度执行,在多CPU环境下允许多个线程并行。线程的存在意义在于实现并发编程,提高算力利用率,以及在需要等待IO时进行其他工作
    • 线程虽然比进程轻量,创建和销毁的速度更快,调度的速度也更快,但同一个进程的线程之间共享同一个内存空间,一旦一个线程出现异常,可能会导致整个进程异常,容易出现线程安全问题
  3. 进程和线程的关系

    线程进程基本执行单元,一个进程可以包含一个或多个线程,这些线程共同执行进程的任务, 并且所有线程共享进程的资源。

    • 资源共享:同一进程内的所有线程共享该进程的资源,包括主存空间、代码和数据空间等。
    • 调度单位:线程是CPU调度的基本单位,操作系统根据线程的状态和优先级进行调度,以决定哪个线程可以运行。
    • 协作与同步:线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步,以避免数据冲突和保证程序的正确执行。

浏览器的进程和线程总结

浏览器核心进程有哪些

  1. 浏览器主进程
    负责协调和主控。它的主要职责包括界面显示、用户交互、子进程管理、网络资源管理等。

    • 主要控制:地址栏、书签、后退、前进,并负责进行浏览器和其它进程之间的调度协调
    • 它具有访问系统资源的权限,Windows中显示为浏览器进程,Android上通常就是App的进程。因为主进程中通常也负责和窗口系统的交互,所以有时也被称为UI进程。
    • 早期主进程负责UI交互,持久化数据访问,网络资源下载。最新的Chromium中持久化数据访问,网络资源已作为独立的进程存在。
  2. 渲染进程(浏览器内核)
    任务是将HTML、CSS和JavaScript转换为用户可以与之交互的网页,排版引擎Blink和JavaScript引擎V8都运行在该进程中

    默认情况下,Chrome为每一个Tab标签页创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下的。

    渲染进程是多线程的,它有几大类子线程:

    • GUI渲染线程
      其中包含 HTML解析引擎、CSS解析引擎,负责渲染浏览器界面,解析HTML,CSS,构建DOM树和RenderObject树,布局和绘制等。当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。

      注意,GUI渲染线程与JS引擎线程是互斥的,当JS引擎执行时GUI线程会被挂起(相当于被冻结了),GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。

    • JS引擎线程
      也叫 JS 内核,负责解析执行 JS 脚本程序的主线程,例如 V8 引擎。JS引擎一直等待着任务队列中任务的到来,然后加以处理

      一个Tab页(renderer进程)中无论什么时候都只有一个JS线程,在运行JS程序。同样注意,GUI渲染线程与JS引擎线程是互斥的,所以如果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞。

    • 事件触发线程
      属于浏览器内核线程(不是JS引擎,可以理解,JS引擎自己都忙不过来,需要浏览器另开线程协助),主要用于控制事件,例如鼠标、键盘等,当事件被触发时,就会把事件的处理函数推进事件队列,等待 JS 引擎线程执行。
    • 定时器触发线程
      主要控制 setInterval和 setTimeout,用来计时,计时完毕后,则把定时器的处理函数推进事件队列中,等待 JS 引擎线程。

      注意,由于JS的单线程关系,所以这些待处理队列中的事件都得排队等待JS引擎处理(当JS引擎空闲时才会去执行)。注意,W3C在HTML标准中规定,规定要求setTimeout中低于4ms的时间间隔算为4ms

    • 异步http请求线程
      通过XMLHttpRequest连接后,通过浏览器新开的一个线程,监控readyState状态变更时,如果设置了该状态的回调函数,则将该状态的处理函数推进事件队列中,等待JS引擎线程执行。
  3. GPU进程
    GPU图形处理器(全称:graphics processg unit,缩写:GPU),的使用初衷是为了实现3DCSS的效果,只是随后网页、Chrome的ui界面都选择采用GPU来绘制,这使得GPU成为浏览器的普遍需求。最后,Chrome在其多进程架构中也引入了GPU进程。

  4. 第三方插件进程
    主要负责插件的运行,因为插件易崩溃,所以通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。每种类型的插件对应一个进程,仅当使用该插件时才创建。

  5. 网络进程
    主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立处理,成为单独一个进程。

  6. 缓存进程(Storage Service)
    负责提供浏览器存储等功能。它是从浏览器主进程中分离出来的服务。

  7. 音频进程(Audio Service):
    负责处理音频、视频。

注意:这些进程共同工作,使得浏览器能够处理各种复杂的任务,如页面渲染、用户交
互、网络资源管理等。多进程的设计不仅提高了浏览器的性能和安全性,还提升了浏览器的稳定性和响应速度。例如,多进程架构可以避免因某个页面的脚本执行占用过多资源而导致的浏览器崩溃,同时也提高了浏览器对不同页面的隔离度,增强了安全性。

浏览器进程与线程相关问题

  1. 为什么GUI渲染线程与JS引擎线程是互斥的?
    由于JavaScript是可操纵DOM的,如果在修改这些元素属性同时渲染界面(即JS线程和UI线程同时运行),那么渲染线程前后获得的元素数据就可能不一致了。
    因此为了防止渲染出现不可预期的结果,浏览器设置GUI渲染线程与JS引擎为互斥的关系,当JS引擎执行时GUI线程会被挂起,GUI更新则会被保存在一个队列中等到JS引擎线程空闲时立即被执行。
  2. css样式写在html文件内和使用link标签引入外部样式有什么区别?
    • css样式如果写在html文件中,在html解析过程中,由html解析引擎解析的。
    • css通过link标签引入,在执行到link标签时,会由css解析引擎解析css。
    • 因为html解析引擎和css解析引擎是并行执行的,所以最好使用link标签引入的方式,提高解析的效率
  3. 从进程的角度分析浏览器地址栏输入url后,浏览器做了什么?
    请添加图片描述

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

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

相关文章

今日分享站

同志们,字符函数和字符串函数已经全部学习完啦,笔记也已经上传完毕,大家可以去看啦。字符函数和字符串函数and模拟函数 加油!!!!!

应用上架后的关键!苹果商店(AppStore)运营策略与技巧指南

1、运营期:怎么能活得好? ▍封号和下架问题 14天 在收到苹果封号通知(我们将会在14天后封你的账号)如果觉得冤枉可以在14天内进行申诉。14天并不是一个严格准确的时间,有可能会在第15天或者在第20天,甚至…

开源基于Node编写的批量HTML转PDF

LTPP批量HTML转PDF工具 Github 地址 LTPP-GIT 地址 官方文档 功能 LTPP 批量 HTML 转 PDF 工具支持将当前目录下所有 HTML 文件转成 PDF 文件,并且在新目录中保存文件结构与原目录结构一致 说明 一共两个独立版本,html-pdf 目录下是基于 html-pdf 模…

【考研数学】数学一和数学二哪个更难?如何复习才能上90分?

很明显考研数学一更难! 不管是复习量还是题目难度 对比项考研数学一考研数学二适用专业理工科类及部分经济学类理工科类考试科目高等数学、线性代数、概率论与数理统计高等数学、线性代数试卷满分150分150分考试时间180分钟180分钟试卷内容结构高等数学约60%&…

在 iCloud.com 上导入、导出或打印联系人

想将iPhone上的电话本备份一份到本地电脑上,发现iTunes好像只是音乐播放了,不再支持像电话本等功能,也不想通过其他第三方软件,好在可以通过iCloud进行导入导出。下面只是对操作过程进行一个图片记录而已,文字说明可以…

CSS中的Flex布局

目录 一.什么是Flex布局 二.Flex布局使用 2.1Flex使用语法 2.2基本概念 三.容器的属性 3.1所有属性概述 3.2flex-direction 3.3flex-wrap 3.4flex-flow 3.5justify-content 3.6align-items 3.7align-content 四.项目(子元素)的属性 4.1所有属性概述 4.2order 4…

失落的方舟 命运方舟台服账号怎么注册 游戏账号最全图文注册教程

探索奇幻大陆阿克拉西亚的奥秘,加入《失落的方舟》(Lost Ark)这场史诗般的冒险。这是一款由Smilegate精心雕琢的MMORPG巨作,它融合了激烈动作战斗与深邃故事叙述,引领玩家步入一个因恶魔侵袭而四分五裂的世界。作为勇敢…

非量表题如何进行信效度分析

效度是指设计的题确实在测量某个东西,一般问卷中使用到。如果是量表类的数据,其一般是用因子分析这种方法去验证效度水平,其可通过因子分析探究各测量量表的内部结构情况,分析因子分析得到的内部结构与自己预期的内部结构进行对比…

Websocket助手

功能介绍 WS助手是WebSocket调试的开发工具,该客户端工具可以帮助开发人员快速连接到测试/生产环境,它可以帮助您监视和分析 Websocket 消息,并在开发过程中解决问题;可以模拟客户端实现与服务器的数据交互,并完成批量…

QT基础初学

目录 1.什么是QT 2.环境搭建 QT SDK的下载 QT的使用 QT构建项目 快捷指令 QT的简单编写 对象树 编码问题 组件 初识信号槽 窗口的释放 窗口坐标体系 1.什么是QT QT 是一个跨平台的 C 图形用户界面库,支持多个系统,用于开发具有图形界面的应…

乡村振兴与农业科技创新:加大农业科技研发投入,推动农业科技创新,促进农业现代化和美丽乡村建设

一、引言 在当代中国,乡村振兴已成为国家发展的重要战略之一。作为国民经济的基础,农业的发展直接关系到国家的稳定和人民的福祉。随着科技的不断进步,农业科技创新在推动农业现代化和美丽乡村建设中发挥着越来越重要的作用。本文旨在探讨如…

线下实体店相亲机构不靠谱!靠谱的相亲交友婚恋软件有哪些?单身找对象必看!

当下大龄剩男剩女矛盾越来越大,单身市场越来越火热,相亲市场需求也在逐渐变大,线下相亲实体店也越来越多。但是从个人经历来说,实体店相亲不靠谱,收费很高,拖又多,根本脱不了单。现在呢&#xf…

echarts-dataset,graphic,dataZoom, toolbox

dataset数据集配置数据 dataset数据集,也可以完成数据的映射,一般用于一段数据画多个图表 例子: options {tooltip: {},dataset: {source: [["product", "2015", "2016", "2017"],["test&q…

视频汇聚EasyCVR视频监控平台GA/T 1400协议特点及应用领域解析

GA/T 1400协议,也被称为视图库标准,全称为《公安视频图像信息应用系统》。这一标准在公安系统中具有举足轻重的地位,它详细规定了公安视频图像信息应用系统的设计原则、系统结构、视频图像信息对象、统一标识编码、系统功能、系统性能、接口协…

亚马逊VC账号产品热销,在美国哪些智能小家电产品最好卖?

亚马逊VC账号产品在美国市场的热销,反映了消费者对于特定智能小家电产品的强烈需求。智能小家电产品因其实用性、便捷性和科技感,近年来在美国市场备受追捧。 以下是一些在亚马逊VC账号上热销的智能小家电产品: 智能扫地机器人 这类产品在美…

重庆耶非凡科技选品师项目大揭秘:成功背后的故事与经验

在电商行业迅猛发展的今天,选品师这一职业愈发受到市场的关注。重庆耶非凡科技有限公司凭借其专业的选品团队和科学的选品方法,成为众多商家关注的焦点。那么,该公司的选品师项目是否真的有成功的案例呢?接下来,我们将从多个角度…

计算机算法中的数字表示法——原码、反码、补码

目录 1.前言2.研究数字表示法的意义3.数字表示法3.1 无符号整数3.2 有符号数值3.3 二进制补码(Twos Complement, 2C)3.4 二进制反码(也称作 1 的补码, Ones Complement, 1C)3.5 减 1 表示法(Diminished one System, D1)3.6 原码、反码、补码总结 1.前言 昨天有粉丝让我讲解下定…

Java实现异步的4种方式

文章目录 异步1、Future与Callable2. CompletableFuture3. Spring框架的异步支持3.1 启动类开启对Async的支持 EnableAsync3.2 配置自定义线程池3.3 异步业务3.4 调用异步业务方法 4. 使用消息队列4.1 安装RabbitMq4.2 使用4.3 MQ消息丢失以及重复消费问题 5、总结 异步 异步&…

在线思维导图编辑!3个AI思维导图生成软件推荐!

思维导图,一种以创新为驱动的视觉化思考工具,已经渗透到我们日常生活和工作的各个角落。当我们需要整理思绪、规划项目或者梳理信息时,思维导图总能提供极大的帮助。 近些年随着云服务等基础设施的完善,我们可以看到越来越多提供…

Vue3实战笔记(34)—完美的菜单组件封装

文章目录 前言多层菜单封装总结 前言 之前简单的封装了一下菜单组件,数据都是写死的,多层嵌套没有支持,学完了组件传值,计算属性就可以继续完善了。 多层菜单封装 先看下数据结构: {"id":"1",&q…