提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
一、进程和线程的关系
进程和线程的关系,不需要过多描述,一个进程可以包含多个线程,一个应用也可以开多个进程(每个网页就是一个单独
的渲染进程,同时打开多个网页,其实就是开了多个进程,但是有时候,一个页面关闭了,其他页面都是正常的),说明进程之间
互不影响,就算一个进程崩溃了,也不会不会影响其他的进程。
但是每个进程中的线程就不一样了,一个进程之间的多个线程可能互相依赖,就像流水线一样,一个崩溃,进程就完犊子了。
二、浏览器中的进程
1. 浏览器主进程
2. GUI进程
3. 网络进程
4. 渲染进程
5. 多个插件进程

(1)浏览器主进程
主要负责界面显示、用户交互、子进程管理,同时提供存储等功能。
(2)GPU进程
GPU 进程的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这
使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程。
(3)网络进程
主要负责页面的网络资源加载
(4)渲染进程
核心任务是将HTML、CSS和JavaScript转换为用户可以与之交互的网页,排版引擎Blink和JavaScript引擎V8都运行
在该进程中,默认情况下,Chrome为每一个Tab标签页创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下
的。此进程包括了GUI线程、javascript解析引擎、事件触发线程。
(5)多个插件进程
主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成
影响。
三、浏览器主进程内的线程
渲染进程是浏览器运行最核心的工作,渲染进程是多线程的,包含5个线程:

(1)GUI渲染线程
负责渲染浏览器界面,解析HTML,CSS,构建DOM树和RenderObject树,布局和绘制等。当界面需要重绘(Repaint)或由于
某种操作引发回流(reflow)时,该线程就会执行注意,GUI渲染线程与JS引擎线程是互斥的,当JS引擎执行时GUI线程会被
挂起(相当于被冻结了),GUI更新会被保存在一个队列中等到JS引擎空闲时立即被执行。
(2)JS引擎线程(单线程)
也称为JS内核,负责处理Javascript脚本程序。(例如常常听到的谷歌浏览器的V8引擎,新版火狐的JaegerMonkey引
擎等)JS引擎线程负责解析Javascript脚本,运行代码。JS引擎一直等待着任务队列中任务的到来,然后加以处理,一个Tab
页(renderer进程)中无论什么时候都只有一个JS线程在运行JS程序同样注意,GUI渲染线程与JS引擎线程是互斥的,所以如
果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞。
(3)事件触发线程
归属于渲染进程而不是JS引擎,用来控制事件轮询(可以理解,JS引擎自己都忙不过来,需要浏览器另开线程协助)当JS引
擎执行代码块如鼠标点击、AJAX异步请求等,会将对应任务添加到事件触发线程中。当对应的事件符合触发条件被触发时,该
线程会把事件添加到待处理任务队列的队尾,等待JS引擎的处理注意,由于JS的单线程关系,所以这些待处理队列中的事件都
得排队等待JS引擎处理(当JS引擎空闲时才会去执行)
(4)定时触发器线程
定时器 setInterval与setTimeout 所在线程浏览器定时计数器并不是由JavaScript引擎计数的,(因为JavaScript引擎
是单线程的, 如果任务队列处于阻塞线程状态就会影响记计时的准确)因此通过单独线程来计时并触发定时(计时完毕后,添
加到js引擎的事件队列中,等待JS引擎空闲后执行)
注意,W3C在HTML标准中规定,规定要求setTimeout中低于4ms的时间间隔算为4ms。
(5) 异步http请求线程
用于处理请求XMLHttpRequest,在连接后是通过浏览器新开一个线程请求。如ajax,是 浏览器新开一个http线程将
检测到状态变更(如ajax返回结果)时,如果设置有回调函数,异步线程就产生状态变更事件,将这个回调再放入js引擎线
程的事件队列中。再由JavaScript引擎执行。
总结:
不积跬步无以至千里
953

被折叠的 条评论
为什么被折叠?



