资讯专栏INFORMATION COLUMN

浏览器的进程与线程详解

darryrzhong / 899人阅读

摘要:浏览器的渲染进程浏览器内核,是多线程的,主要以下几大类线程引擎线程事件触发线程定时器线程网络请求线程线程负责渲染浏览器界面元素当界面需要重绘或由于某种操作引发回流时该线程就会执行。

进程

进程是cpu的资源分配的最小单位。

多进程:多进程指的是在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态。多进程带来的好处是明显的,比如你可以听歌的同时,打开编辑器敲代码,编辑器和听歌软件的进程之间丝毫不会相互干扰。

浏览器是多进程的,浏览器的进程主要包括以下几种:

Browser进程:浏览器的主进程(负责协调,主控)

第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建

GPU进程:最多一个,用于3D绘制

浏览器渲染进程(内核):默认每个Tab页面一个进程,互不影响,控制页面渲染,脚本执行,事件处理等(有时候会优化,如多个空白tab会合并成一个进程)

在浏览网页时,同时打开几个新的页面, 这就要打开几个浏览窗口,但一旦开启十几个窗口,整个计算机就会越来越慢。

多进程浏览器的优点

避免页面渲染影响整个浏览器

避免第三方插件影响整个浏览器

多进程充分利用多核优势

方便使用沙盒模型隔离插件等进程,提高浏览器稳定性

通俗的讲,就是用户打开多个窗口,如果其中一个窗口崩掉了,也不会影响整个浏览器,其他的界面照样正常运行

线程

一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;

进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号)。

浏览器的渲染进程(浏览器内核),是多线程的,主要以下几大类:

GUI线程

Javascript引擎线程

事件触发线程

定时器线程

网络请求线程

GUI线程

负责渲染浏览器界面HTML元素,当界面需要重绘(Repaint)或由于某种操作引发回流(reflow)时,该线程就会执行。在Javascript引擎运行脚本期间,GUI渲染线程都是处于挂起状态的,也就是说被”冻结”了.

Javascript引擎线程

也可以称为JS内核,主要负责处理Javascript脚本程序,例如V8引擎。Javascript引擎线程理所当然是负责解析Javascript脚本,运行代码。

Javascript是单线程的

这是因为Javascript这门脚本语言诞生的使命所致:JavaScript为处理页面中用户的交互,以及操作DOM树、CSS样式树来给用户呈现一份动态而丰富的交互体验和服务器逻辑的交互处理。如果JavaScript是多线程的方式来操作这些UI DOM,则可能出现UI操作的冲突; 如果Javascript是多线程的话,在多线程的交互下,处于UI中的DOM节点就可能成为一个临界资源,假设存在两个线程同时操作一个DOM,一个负责修改一个负责删除,那么这个时候就需要浏览器来裁决如何生效哪个线程的执行结果。当然我们可以通过锁来解决上面的问题。但为了避免因为引入了锁而带来更大的复杂性,Javascript在最初就选择了单线程执行。

GUI 渲染线程 与 JavaScript引擎线程互斥!

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

JS阻塞页面加载

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

定时触发器线程

浏览器定时计数器并不是由JavaScript引擎计数的, 因为JavaScript引擎是单线程的, 如果处于阻塞线程状态就会影响记计时的准确, 因此通过多带带线程来计时并触发定时是更为合理的方案。

事件触发线程

当一个事件被触发时该线程会把事件添加到待处理队列的队尾,等待JS引擎的处理。这些事件可以是当前执行的代码块如定时任务、也可来自浏览器内核的其他线程如鼠标点击、AJAX异步请求等,但由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。

异步http请求线程

在XMLHttpRequest在连接后是通过浏览器新开一个线程请求, 将检测到状态变更时,如果设置有回调函数,异步线程就产生状态变更事件放到 JavaScript引擎的处理队列中等待处理。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108658.html

相关文章

  • 览器进程线程详解

    摘要:浏览器的渲染进程浏览器内核,是多线程的,主要以下几大类线程引擎线程事件触发线程定时器线程网络请求线程线程负责渲染浏览器界面元素当界面需要重绘或由于某种操作引发回流时该线程就会执行。 进程 进程是cpu的资源分配的最小单位。 多进程:多进程指的是在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态。多进程带来的好处是明显的,比如你可以听歌的同时,打开编辑器敲代码,编...

    wangxinarhat 评论0 收藏0
  • 览器进程线程详解

    摘要:浏览器的渲染进程浏览器内核,是多线程的,主要以下几大类线程引擎线程事件触发线程定时器线程网络请求线程线程负责渲染浏览器界面元素当界面需要重绘或由于某种操作引发回流时该线程就会执行。 进程 进程是cpu的资源分配的最小单位。 多进程:多进程指的是在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态。多进程带来的好处是明显的,比如你可以听歌的同时,打开编辑器敲代码,编...

    zhjx922 评论0 收藏0
  • 第五天 JavaScript单线程详解

    摘要:若以多线程的方式操作这些,则可能出现操作的冲突。另外,因为是单线程的,在某一时刻内只能执行特定的一个任务,并且会阻塞其它任务执行。浏览器事件触发线程事件触发线程,当一个事件被触发时该线程会把事件添加到任务队列的队尾,等待引擎的处理。 首先,说下为什么 JavaScript 是单线程? 总所周知,JavaScript是以单线程的方式运行的。说到线程就自然联想到进程。那它们有什么联系呢? ...

    caiyongji 评论0 收藏0
  • 览器详解

    摘要:渲染引擎也称为呈现引擎浏览器内核,负责显示请求的内容。引擎是基于事件驱动单线程执行的,引擎一直等待着任务队列中任务的到来,然后加以处理,浏览器无论什么时候都只有一个线程在运行程序。 1 浏览器结构 showImg(https://segmentfault.com/img/bVk7AU); 浏览器分为以下7个部分: 用户界面 浏览器引擎:在用户界面和呈现引擎之间传送指令。 渲染引擎:也...

    Amos 评论0 收藏0

发表评论

0条评论

darryrzhong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<