浏览器工作原理(1):浏览器架构概述

一,什么是浏览器

浏览器本质是根据w3c标准实现的用来检索呈现万维网信息资源的应用程序。

二,进程线程和协程

  • 进程

    一个进程就是一个正在运行的程序。运行一个程序时,操作系统会开辟一块内容用来存放和执行这个程序

    资源共享:进程之间资源不共享,需要使用 **IPC(Inter Process Communication)**来进行进程之间的通信。

  • 线程

    线程是由进程产生,并由进程调度,使用进程的资源执行任务的调度单位,是进程中实际运作的单位。

    资源共享:线程由进程产生,同一个进程间的线程共享资源。

  • 协程

    协程是协作式多任务,具有并发性(程序执行时间由语言层面调度,程序可以使用 yield 交出当前线程执行权,并挂起该任务,让线程执行其他任务,等到适当的时间再回来执行该挂起的任务),与线程不同的是,线程是抢占式多任务,具有并行性(程序执行时间由系统调度决定)。协程利用的就是线程在等待某个任务时,这条空闲的线程完全可以快速的去执行其他任务,直到该任务可以执行时再回来执行,针对I/O密集型的任务其效率是非常高的。协程利用程序等待时间来来快速执行其他任务,不需要进程的切换,没有锁问题。

进程和线程的关系:

  1. 进程中的任一线程崩溃,会导致整个线程崩溃。
  2. 同一进程中的线程共享数据。
  3. 不同的进程之间不共享数据,需要借助 IPC 进行线程间的通信。
  4. 当一个进程退出时,操作系统回收该进程所占用的所有内存,包括内存泄漏开辟的内存。

三,浏览器架构

现代浏览器的架构为多进程架构,一个浏览器打开之后会打开很多进程:包括 浏览器进程页面进程GPU进程网络进程渲染进程等,每个进程都有各自的任务,但是为什么浏览器要设计成为多进程架构呢?那还要从最初的浏览器机构说起:

  • 单进程浏览器

    单进程浏览器,顾名思义,整个浏览器应用只有一个进程,所有渲染,网络进程,每个页面运行,都由一个进程工作,这会产生许多的问题:

    1. 不安全,该进程之间所有的线程都能互相读取数据,这意味插件或者页面脚本都能使用浏览器的权限,如果这些插件和脚本是恶意的,拿当页面运行时,会引发很严重的安全隐患。
    2. 不稳定,由于是单进程架构,一个线程崩溃,整个进程崩溃。
    3. 不快速,渲染,网络请求,页面运行这些全都只由一个进程运行,如果中间某一个环节耗费时间过长,用户会明显感觉到卡顿,或者程序某个地方陷入死循环,那后果可想而知。

    浏览器工作原理(1):浏览器架构概述_第1张图片

  • 多进程浏览器

    拿Chrome浏览器为例子:一个浏览器打开之后会打开很多进程:包括 浏览器进程GPU进程网络进程渲染进程等,每个进程都负责特定的任务。该架构解决了单线程架构的问题:

    1. 安全,采用多进程可以使用安全沙盒运行插件进程,这意味着给插件进程上锁,上锁的进程没有系统的权限,不能你的电脑中注入任何的数据。
    2. 快速,页面的渲染会开辟新的渲染进程,页面渲染发生堵塞时并不会影响到其他的进程,一个页面渲染堵塞不会影响整个浏览器,因为这个堵塞只会影响该页面的渲染进程,并不会影响到其他页面的渲染进程。
    3. 稳定,渲染进程之间相互隔离,不同的页面由不同的渲染进程渲染,一个页面崩溃不会影响其他页面

    浏览器工作原理(1):浏览器架构概述_第2张图片

你可能感兴趣的:(浏览器工作原理,架构,前端)