浏览器架构概览
浏览器本质上是运行在计算机操作系统下的一个应用软件
前言知识
多任务
简单地说, 就是操作系统可以同时运行多个任务。
真正的并行执行多任务只能在多核CPU上实现,但在实际应用中,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行,让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。
进程
编写完毕的代码,在没有运行的时候,我们称之为程序
;正在运行着的代码,就成为进程
。
进程是系统资源分配的单位,简单来说就是一段运行着的程序;
启动一个进程时,系统会给它分配地址空间(每个进程都有自己独立的地址空间,所以互不影响),建立数据表来维护代码段,堆栈信息,数据段,占用很多资源.
进程之间有自己的通信方式(IPC), ICP.
线程
线程就是系统资源调度的单位,是程序执行的最小单位;
可以理解为进程中执行代码的指针
,线程存在于进程并执行程序任意部分
,由系统的调度算法来决定其如何运行.
线程是共享进程中的数据的,使用相同的地址空间;所以 cpu 切换线程很快,要比操作进程快;
线程间通信快, 因为他们共享同一进程下的全局变量,静态数据等; 当然这样也会互相影响,利弊都有.
浏览器结构组成
1.用户界面(user interface)
浏览器中菜单栏、地址栏、向前/回退按钮、书签目录等除了页面显示窗口外的所有地方都属于用户界面。
2.浏览器引擎(browser engine)
浏览器引擎是各个组件之间通信的核心,它在用户界面与渲染引擎间传递指令。为渲染引擎提供接口,将用户界面上的给定的网址、用户浏览器操作(如刷新、向前、退后等)信息提供给为渲染引擎;同时,浏览器引擎 为用户界面提供各种如错误提示、资源下载进度等消息。还有,它可以在客户端本地缓存中读写数据。
3.渲染引擎(rendering engine)
渲染引擎负责显示请求的内容。例如,如果请求的内容是HTML文件,则它负责解析文件里的html、css等信息,并将网页内容渲染呈现出来。渲染引擎的内部包括了html解析器、css解析器等。
4.网络模块(networking)
处理网络请求,比如http请求网页、图片资源等。
5.JavaScript解释器(JavaScript interpreter)
网页中经常有JS脚本来动态操作网页,就是靠这个JS引擎来解析执行的。比如Chrome浏览器的V8引擎、Safari浏览器的JavaScriptCore引擎,IE的Chakra
6.界面后端(UI backend)
前面介绍的用户界面是展示给用户看到的,界面后端是浏览器的图形库,用来绘制基本的浏览器窗口内控件,如输入框、按钮、单选按钮、组合框和窗口等,不同浏览器绘制的视觉效果不太想同,但功能基本都是一样的。
7.数据存储(data persistence)
管理用户数据,将与浏览会话相关联的各种数据存储在硬盘上,例如保存书签、cookie、缓存、偏好设置等各种数据,可通过浏览器引擎提供的API进行调用。
浏览器架构组成
浏览器本质上是一个软件(应用程序),采用的是多进程架构,软件在运行时会创建多个进程,协同工作,保证程序正常运行...
- 进程分类:
浏览器进程(主进程): 管理用户交互(如地址栏,书签...),子进程管理,文件存储等(负责tab外的工作)
渲染进程(沙箱模式): 负责页面渲染,JS脚本的执行,页面事件的处理等,可以同时开启多个渲染进程(tab页);
> js引擎和 render引擎都运行在这个进程下
- 渲染线程(引擎)
- js 线程(引擎)
网络进程: 面向渲染进程和浏览器进程等提供网络下载功能
GPU(图形处理器)进程: 处理gpu任务,负责3D绘制
插件进程: 管理浏览器扩展程序等
其他进程...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。