王文健的博客笔记


请多指教

浏览器的运行机制——进程与线程

写在前面
本文直接从本地的笔记中移植过来,是基于我自己所需的知识点的笔记,不成文章,具体细节有时间补充

浏览器的运行机制

进程和线程

进程与线程区别

  • 进程是cpu资源分配的最小单位(是能拥有资源和独立运行的最小单位)
  • 线程是cpu调度的最小单位(线程是建立在进程之上一次程序运行单位,一个进程可有多个线程)
  • PS:单线程与多线程,都是指一个进程中的单和多

浏览器多进程

系统给进程分配了资源(cpu,内存)

  1. Browser进程:浏览器的主进程(负责协调、主控),只有一个
  2. 第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建
  3. GPU进程:最多一个,用于3D绘制等
  4. 浏览器渲染进程:(浏览器内核)(Renderer进程,内部是多线程的),用作页面渲染,js执行等

浏览器渲染进程

前端主要用到的进程,页面渲染,js执行,事件循环等

  1. GUI渲染线程

    • 负责渲染浏览器界面,解析HTML,CSS构建DOM树和RenderObject树,布局和绘制等。
    • 当界面需要重绘或回流,会触发该线程
    • GUI渲染线程与JS引擎线程是互斥的,当js引擎执行时GUI线程就会被挂起,GUI更新会保存在一个队列中等js引擎空闲时执行
  2. JS引擎线程

    • js内核,处理执行js脚本程序(v8)
    • 只会有一个js执行线程,等待任务队列中任务到来,加以处理
    • GUI渲染线程与JS引擎线程是互斥的,所以如果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞。
  3. 事件触发线程

    • 归属于浏览器而不是JS引擎,用来控制事件轮询,js例外开启线程辅助js引擎线程(异步)
    • 当js引擎执行脚本中有事件,就会将它添加到事件触发线程中
    • 当事件线程中的事件被触发时,线程就会把事件添加到js引擎线程任务队列的队尾中,等待js引擎空闲时,去执行队列中的任务
  4. 定时器触发线程

    • setInternalsetTimeout所在线程
    • 浏览器另开一条线程计时,与事件触发线程类似,计时完毕后添加到js引擎线程任务队列的队尾,等js引擎空闲时执行
    • 所以计时的时间是把执行任务放到任务队列中的时间,并不一定是任务执行时间(有误差),是任务执行最快时间,w3c标准规定setTimeout最少计时时间为4ms,小于取4ms
  5. HTTP异步请求线程

    • 去发送http请求,,检测到状态变更时,如果有回到函数就会产生状态变更事件,放到js引擎任务队列中,等待js引擎空闲去执行

关于Event Loop事件循环请看这篇文章

参考文章
从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理

未经允许不得转载:王文健的博客笔记 » 浏览器的运行机制——进程与线程

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Copyright & copy; 2018 @王文健. All rights reserved.

小编留言

本网站是作者学习路上的一个见证,记录和敦促我的学习生活,也希望借此结交更多前辈好友。记录作者在学习生活的点点滴滴,愿与你一同进步,共勉!

Copyright & copy; 2018 @王文健. All rights reserved.

感谢 WordPress DUX 提供的参考模板与设计,阿里云提供的优质云服务,使我完成本网站的制作