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

news2024/11/24 14:06:10

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

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

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

进程和线程是操作系统中用于管理程序执行的两个基本概念
  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后,浏览器做了什么?
    请添加图片描述

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

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

相关文章

PHPSTOM配置Laradock,xdebug,phpunit

原理图: 片面理解: phpstorm启用一个9000端口,这个端口用来接收到信息后,启用xdebug功能。服务器端(docker), 当客户端访问laravel项目域名后, 并读取xdebug.ini的配置, 把调试的请求数据, 向配置里面的端口发送消息, 配置里面的端…

QGIS开发笔记(三):Windows安装版二次开发环境搭建(下):将QGis融入QtDemo,添加QGis并加载tif遥感图的Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/139136356 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

如何在phpMy管理对Joomla后台的登录密码进行重置

本周有一个客户,购买Hostease的虚拟主机,询问我们的在线客服,如何在phpMy管理对Joomla后台的登录密码进行重置?我们为用户提供相关教程,用户很快解决了遇到的问题。在此,我们分享这个操作教程,希…

​用 ONLYOFFICE 宏帮你自动执行任务:介绍与教程

使用 ONLYOFFICE 宏,可以来自动实现一些操作节省更多时间和精力。在本文中,我们集合了一些关于宏的教程,带您了解宏的工作原理,以及一些实例展示。 什么是 ONLYOFFICE 宏 如果您是一名资深 Microsoft Excel 用户,那么…

大数据报告有什么作用?查询方式一般有几种?

随着互联网金融的飞速发展,网络借贷已经成为了一种常见的融资方式。然而,如何在众多的平台中做出正确的选择,避免风险并实现最大利益,这就需要一份具有参考价值的大数据报告。本文将详细阐述大数据报告的作用及查询方式的几种方式…

ROS2贪吃龟练习工程

本文是ROS2基础知识的综合小应用,练习如何创建工作包,创建Node,定义Topic和Service,以及通过LaunchFile启动多个节点。基础知识可以参考:ROS2基础编程,ROS2 Topics和Services,ROS2 LaunchFile和…

模拟集成电路(5)----单级放大器(共栅级)

模拟集成电路(5)----单级放大器(共栅级) 有一些场合需要一些小的输入电阻(电流放大器) 大信号分析 − W h e n V i n ≥ V B − V T H ∙ M 1 i s o f f , V o u t V D D − F o r L o w e r V i n I d 1 2 μ n C o x W L ( V…

matlab安装及破解

一、如何下载 软件下载链接,密码:98ai 本来我想自己生成一个永久百度网盘链接的,但是: 等不住了,所以大家就用上面的链接吧。 二、下载花絮 百度网盘下载速度比上载速度还慢,我给充了个会员&#xff0c…

java调用远程接口下载文件

在postman中这样下载文件 有时下载文件太大postman会闪退,可以通过代码下载,使用hutool的http包

中华活页文选高中版投稿发表

《中华活页文选(高中版)》创刊于1960年,是中宣部所属中国出版传媒股份有限公司主管、中华书局主办的国家级基础教育期刊,曾获得“中国期刊方阵双效期刊”、国家新闻出版广电总局推荐的“百种优秀报刊”等荣誉称号。本刊以高中学科…

WAMP无法启动mysql

一种原因是原来安装过mysql,mysql默认是自启动的,而WAMP内置mysql会发生冲突,所以 解决方法: winR 输入 services.msc 将mysql关闭,并设为手动模式

扒出秦L三个槽点,我不考虑买它了

文 | Auto芯球 作者 | 雷慢 比亚迪的有一个王炸“秦L”,再一次吸引了我注意力, 我上一辆车刚卖不久,最近打算买第二辆车, 二手车和新车都有在看, 我又是一个坚定的实用主义者, 特别是现在的经济环境不…

深入解析 JSONPath:从入门到精通

码到三十五 : 个人主页 在数据处理和交换领域,JSON已经成为了一种广泛使用的数据格式, 如何有效地查询和操作这些数据也变得越来越重要。在这种情况下,JSONPath 应运而生,成为了一种在JSON数据中定位和提取信息的强大工…

老师如何对付挑事儿的家长?

身为老师,你有没有遇到过这样的家长:孩子在学校里闹点小矛盾,或者作业分数有点争议,他们就气势汹汹地来找你,说你偏心,甚至在其他家长面前说三道四?面对这种爱“挑事”的家长,老师们…

Nacos 2.x 系列【12】配置加密插件

文章目录 1. 前言2. 安装插件2.1 编译2.2 客户端2.3 服务端 3. 测试 1. 前言 为保证用户敏感配置数据的安全,Nacos提供了配置加密的新特性。降低了用户使用的风险,也不需要再对配置进行单独的加密处理。 前提条件: 版本:老版本暂时不兼容&…

AI在肿瘤学临床决策中的应用:一种多模态方法

在临床肿瘤学领域,多模态人工智能(AI)系统通过解读各类医学数据,展现出提升临床决策的潜力。然而,这些模型在所有医学领域中的有效性尚未确定。本文介绍了一种新型的多模态医疗AI方法,该方法利用大型语言模…

maven自建的两个模块怎么相互引用

【背景】 我们平时用Maven仓库都是引用外部别人写好的jar包,今天我需要自己在同一个Project下,在一个模块引用另一个模块中的类。案例展示如下: 【操作】 每个模块都有个自己的pom.xml文件,项目下也有个自己的pom.xml文件&#…

20240529瑞芯微官方Toybrick TB-RK3588开发板的Debian11安装iperf并测试网速

20240529瑞芯微官方Toybrick TB-RK3588开发板的Debian11安装iperf并测试网速 2024/5/29 15:09 服务器端:瑞芯微官方Toybrick TB-RK3588开发板:Debian11 客户端:笔记本电脑:Ubuntu20.04 两者通过千兆交换机连接! toybr…

使用Java Swing制作一个飞翔的小鸟游戏

文章目录 一、需求分析二、技术介绍2.1相关技术2.2开发环境 三、功能实现1、开始2、运动3、死亡 四、部分代码实现获取源码 文章最下方获取源码!!! 文章最下方获取源码!!! 文章最下方获取源码!&…

芝加哥大学最新研究:GPT-4与财务预测,重塑财务分析的未来

最近,芝加哥大学的研究团队发表了一篇突破性的研究,展示了大型语言模型(LLM),特别是 OpenAI 开发的 GPT-4,如何在财务报表分析领域取得了与专业分析师相匹配甚至超越的表现。这项研究不仅凸显了人工智能在高…