zoukankan      html  css  js  c++  java
  • [前端]浏览器使用多进程架构的原因

    一、为什么在一个浏览器中使用多个进程。   

        问题:在使用浏览器时偶然发现虽然仅仅打开一个标签页,但是在任务管理器内发现有多个浏览器进程在运行,占用了不小的内存,当时很纳闷:为什么一个浏览器却需要多个进程呢?

        原因:把所有tab页都放进一个进程的浏览器面临在健壮性,响应速度,安全性方面的挑战。将插件或是网络应用放在与浏览器本身不同的进程中。在一个渲染引擎中的崩溃并不会影响浏览器本身或是其他网络应用。这意味着操作系统可以并发的运行网络应用来提高响应速度,如果一个特定的网络应用程序或是插件停止响应时浏览器本身并不会被死锁。

        Google Chrome可以有自己的任务管理器,你可以通过右击浏览器标题栏打开。这个任务管理器可以让你跟踪每个网络应用和插件的资源使用率,而不是针对整个浏览器。它也可以让你在不需要重启浏览器的情况下终止任何停止响应网络应用或插件。

    二、每个进程内都有什么 

    Google Chrome创建三种不同类型的进程:浏览器进程,渲染器进程,插件进程。

          1.浏览器进程:浏览器进程只有一个,用于管理标签页、窗口和浏览器本身。这个进程同时负责处理所有跟磁盘、网络、用户输入和显示的交互,然而它不分析和渲染任何网页内容。

          2.渲染器进程:渲染器进程会创建多个进程,每个都负责渲染网页。渲染器进程中包含用于操作HTML,JavaScript,CSS,图片和其他内容的复杂的逻辑。我们使用了也同样被Apple Safari浏览器使用的开源的WebKit渲染引擎实现以上功能。每个渲染器进程都运行在沙箱内,这意味着它对磁盘、网络和显示器没有直接的访问权限。所有跟网络应用的交互,包括用户输入事件和屏幕绘制都必须通过浏览器进程。这可以让浏览器进程监视渲染器的可疑行为,一旦发现其从事破坏活动就将其终止。

    • GUI渲染线程 
        • 主要负责页面的渲染,解析HTML、CSS,构建DOM树,布局和绘制等。

        • 当界面需要重绘或者由于某种操作引发回流时,将执行该线程。

        • 该线程与JS引擎线程互斥,当执行JS引擎线程时,GUI渲染会被挂起,当任务队列空闲时,JS引擎才会去执行GUI渲染。 

    • JS引擎线程 
        • 该线程当然是主要负责处理Javascript脚本,执行代码。

        • 也是主要负责执行准备好待执行的事件,即定时器计数结束,或者异步请求成功并正确返回时,将依次进入任务队列,等待JS引擎线程的执行。

        • 当然,该线程与互斥,当JS引擎线程执行 脚本时间过长,将导致页面渲染的阻塞。 

    • 事件触发线程 
        • 主要负责将准备好的事件交给JS引擎线程执行。

        • 比如setTimeout定时器计数结束,ajax等异步请求成功并触发回调函数,或者用户触发点击事件时,该线程会将整装待发的事件依次加入到任务队列的队尾,等待JS引擎线程的执行。 

    • 定时器触发线程 
        • 顾名思义,负责执行异步定时器一类的函数的线程,如:setTimeout,setInterval。

        • 主线程依次执行代码时,遇到定时器,会将定时器交给该线程处理,当计数完毕后,事件触发线程会将计数完毕后的事件加入到任务队列的尾部,等待JS引擎线程执行。 

    • HTTP请求线程 
        • 顾名思义,负责执行异步请求一类的函数的线程,如:Promise,axios,ajax等。

        • 主线程依次执行代码时,遇到异步请求,会将函数交给该线程处理,当监听到状态码变更,如果有回调函数,事件触发线程会将回调函数加入到任务队列的尾部,等待JS引擎线程执行。

         渲染器进程在前端开发的运用见:https://www.cnblogs.com/vickylinj/p/10907908.html

      3.插件进程:浏览器进程同样为处于使用状态的每种类型的插件创建一个进程,如:Flash、Quicktime或Adobe reader。这些进程仅仅包含插件本身以及和浏览器进程、渲染器进程交互的胶水代码。

    三、在什么情况下浏览器会创建进程

    • 浏览器进程:浏览器进程只有一个;
    • 渲染器进程:浏览器对每个标签页面使用不同的渲染器进程(浏览器有自己的优化机制,当我们打开多个空白的 tab页时,浏览器会将这多个空白页的进程合并为一个),但是允许两个相关的且属于同一站点的网页共享同一个渲染器进程;
    • 插件进程:对于每一种类型的插件,当你第一次访问一个使用该插件的网页时,google chrome会创建一个插件进程。只有当所有使用该插件的所有网页都被关闭之后,该进程才会被撤销。
  • 相关阅读:
    POJ1094(Topological Sort)
    POJ1258(Minimum Spanning Tree,Prim)
    POJ2509(Water,Greedy)
    POJ1258(Minimum Spanning Tree,Kruskal)
    POJ1256(permutation)
    POJ2790(BFS)
    HDU 1527 取石子游戏
    POJ Mayor's posters
    HDU 1907 John
    HDU 2516 取石子游戏
  • 原文地址:https://www.cnblogs.com/vickylinj/p/10907326.html
Copyright © 2011-2022 走看看