游览器的进程和线程

作者: 3624d4286e87 | 来源:发表于2018-03-02 23:10 被阅读16次

进程和线程的区别

CPU

计算机的核心,其负责承担计算机的计算任务(可以比喻为一个工厂)。

进程

CPU资源分配的最小单位,是能拥有资源和独立运行的最小单位。(可以比喻为工厂车间,是一个工厂任务的环节)任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。

线程

CPU调度的最小单位,是建立在进程基础上的一次程序运行单位,属于单个的程序执行流,是一个进程中代码的不同执行路线。(可以比喻为一个车间的工人组成的一个个任务小组,不同的执行流,协同完成一个任务)

总述

一个进程中可以拥有多个线程,同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源。虽然不同进程之间也可以通信,不过代价较大。(可以在电脑的任务管理器中查看进程)

浏览器是多进程的

概述

  1. 浏览器之所以能够运行,是因为系统给它的进程分配了资源(cpu和内存)。
  2. 每打开一个Tab页,就创建了一个独立的浏览器进程,每个进程相互独立。(可以在Chrome的任务管理器上验证tab页进程)

多进程的好处

  1. 不会因为一个tab页崩溃,导致其他tab页也被影响。
  2. 相对于线程,进程之间是不共享资源和地址空间的,所以也不会存在太多的安全问题。

包含的进程种类

  • Browser进程——浏览器的主进程,负责协调、主控,只有一个
  • 第三方插件进程——每种类型的插件对应一个进程,仅当使用该插件时才创建
  • GPU进程——最多一个,用于3D绘制等
  • 浏览器渲染进程——也就是浏览器内核

Browser进程与渲染进程的通信

  1. 如果打开任务管理器,然后打开一个浏览器,就可以看到任务管理器中出现了两个进程,一个是主控进程,一个则是打开Tab页的渲染进程
  2. 整个过程如下:
1.Browser进程收到用户请求,首先需要获取页面内容,随后将该任务通过RendererHost接口传递给Render进程。
2.Renderer进程的Renderer接口收到消息,简单解释后,交给渲染线程,然后开始渲染。
3.渲染线程接收请求,加载网页并渲染网页,这其中可能需要Browser进程获取资源和需要GPU进程来帮助渲染。
4.当然可能会有JS线程操作DOM(这样可能会造成回流并重绘)
5.最后Render进程将结果传递给Browser进程
6.Browser进程接收到结果并将结果绘制出来
  • 如图所示


    test.png

游览器内核是多线程的

常驻线程

  • GUI 渲染线程——负责渲染浏览器界面,解析HTML,CSS
  • JavaScript引擎线程——负责处理Javascript脚本程序
  • 定时触发器线程——处理setInterval与setTimeout任务
  • 事件触发线程——处理事件消息,控制事件循环
  • 异步http请求线程——处理XMLHttpRequest异步请求

线程之间的关系

GUI渲染线程与JS引擎线程互斥

  1. 由于js可以DOM,如果在修改这些元素属性同时渲染界面(即JavaScript线程和UI线程同时运行),那么渲染线程前后获得的元素数据就可能不一致了。
  2. 因此为了防止渲染出现不可预期的结果,浏览器设置GUI渲染线程与JavaScript引擎为互斥的关系,当JavaScript引擎执行时GUI线程会被挂起,GUI更新会被保存在一个队列中等到引擎线程空闲时立即被执行

js为什么会阻塞页面加载

  1. 由于GUI渲染线程与JavaScript执行线程是互斥的关系,当浏览器在执行JavaScript程序的时候,GUI渲染线程会被保存在一个队列中,直到JS程序执行完成,才会接着执行。
  2. 因此如果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉

WebWorker与SharedWorker

  • WebWorker——运行在web后台的线程,相当于js引擎向浏览器申请开一个子线程,由浏览器所开的,完全受主线程控制,而且不能操作dom

  • SharedWorker——是浏览器所有页面共享的,不能采用与Worker同样的方式实现,因为它不隶属于某个Render进程,可以为多个Render进程共享使用

  • WebWorker与SharedWorker本质上就是进程和线程的区别,SharedWorker由独立的进程管理,WebWorker只是属于render进程下的一个线程

参考

相关文章

  • 游览器的进程和线程

    进程和线程的区别 CPU 计算机的核心,其负责承担计算机的计算任务(可以比喻为一个工厂)。 进程 CPU资源分配的...

  • javascript单线程,异步与执行机制

    js的单线程模型与游览器的进程/线程息息相关,在了解js单线程与异步的时候,建议先看看这篇文章 单线程/异步 js...

  • 线程和进程概念

    线程和进程 进程 线程 线程和进程的区别

  • OC-底层原理 23:多线程原理

    本文的目的在于了解进程、线程、多线程、线程池等的基本概念及原理 线程 和 进程 线程和进程的定义 线程 线程时进程...

  • iOS 多线程原理

    本文的目的在于了解进程、线程、多线程、线程池等的基本概念及原理 线程 和 进程 线程和进程的定义 线程 线程时进程...

  • 线程

    线程和进程 进程 线程 线程和进程的区别 线程的好处和坏处 创建线程的方式一 线程中常用的方法 代码实例 创建线程...

  • 17_多线程

    =================线程和进程 =============进程 =============线程 ==...

  • iOS底层原理24:多线程原理

    本文的目的在于了解进程、线程、多线程、线程池等的基本概念及原理 线程和进程 线程和进程的定义 线程 线程是进程的基...

  • 多线程

    线程和进程的概念: 进程:正在运行的应用就是一个进程线程:进程中执行每个任务的是线程 进程和线程的关系: 一个进程...

  • 多线程介绍

    线程和进程 线程和进程的定义 线程:线程是进程的基本执行单元,一个进程的所有任务都在线程中执行进程要想执行任务,必...

网友评论

    本文标题:游览器的进程和线程

    本文链接:https://www.haomeiwen.com/subject/isdaxftx.html