一、什么是进程
进程是操作系统分配资源的最小单位,是能拥有资源,独立运行的最小单元,每个进程有自己的内存空间。
二、什么是线程
线程是CPU调度的最小单位,线程是建立在进程基础上的一次程序运行单位,一个进程可以包含多个线程。
一个程序至少有一个进程,一个进程至少有一个线程,多个线程之间可共享数据。
三、浏览器是多进程的
每打开一个标签页面,就打开了一个进程,相同类型的标签页会合并到一个进程,这个进程又包括:
1、主进程:负责标签页的创建与销毁,页面的后退、前进和历史记录、负责页面的资源管理
2、第三方插件进程:主要负责第三方插件的使用
3、GPU进程:主要负责3D绘制和硬件加速
4、浏览器渲染进程:负责CSS、HTML、JS代码的解析和执行
浏览器渲染进程又包括以下几个线程,主要有:
1、GUI渲染线程
2、JS引擎线程
3、事件触发线程
4、定时器触发线程
5、异步HTTP请求线程
其中JS引擎线程与GUI渲染线程互斥,当JS引擎线程空闲时,会执行GUI渲染线程。
四、浏览器内核
浏览器内核指的是浏览器渲染进程。
浏览器引擎主要包括HTML解释器、CSS解释器、图片、布局、网络等零部件。浏览器渲染进程程其实就是不同功能模块的相互协调工作,主要是html解释器、css解释器、图层布局计算模块、图层绘制模块和JS引擎渲染模块。
V8引擎非常复杂,由许多子模块组成,最重要的4个模块:
1、Parser: 负责将JS代码转化为Abstract Syntax Tree(AST)
2、Ignition: 解释器,负责将JS代码转化为Bytecode,解释执行Bytecode,并且负责第三步需要的 信息
3、TurboFan: 编译器,根据第二步收集到的信息,将Bytecode转化为优化的汇编代码
4、Orinoco: 垃圾回收模块,负责将不再使用的内存空间回收
JS单线程:JS引擎在执行JS代码时,只分配一个线程