进程和线程的关系

1、基本概念

进程

cpu资源分配的最小单位(能拥有资源和独立运行的最小单位)

线程

cpu调度的最小单位(建立在进程的基础上的一次程序运行单位,一个进程可以有多个线程)

CPU

其实就是电脑的一块芯片,但发挥着巨大作用,主要是控制计算机的运行,是电脑的中央处理器。能够串行地处理一个接一个的任务,相当于人类的大脑,有着不可替代的位置。

GPU

是附属型的处理器,主要处理图形相关的工作,将数据呈现在显示器中。与硬件加速相关。能够并行的处理任务,处理的数据量较大。

2、三层基础架构

image

当我们电脑打开一个app应用的时候,其实背后是GPU和CPU在支撑着应用的运行。当app创建一个进程时,操作系统级就会为这个进程开辟一片私人空间,里面存储着这个进程所有的数据和状态。当这个进程被关闭时,进程所对应的空间也会被操作系统释放掉。同时,操作系统的运行也离不开计算机硬件的支持。
计算机系统由于计算机硬件和计算机软件组成。计算机硬件包括CPU芯片,输入输出设备,存储器等等。计算机软件包括操作系统,工具软件,系统软件等。

3、进程和线程是如何工作的呢?

浏览器有两种架构,单进程架构和多进程架构。

单进程架构

启动一个进程,这个进程里面有多个线程工作。只有IE7以下和早期的火狐是单进程架构,其他浏览器几乎是多进程架构。

缺点:

不稳定,不流畅,不安全

  • 不流畅

如果浏览器只有一个进程,当这个进程执行的程序比较复杂时,就容易导致整个浏览器崩溃。比如当程序正在执行3d动画时,突然CPU被某个插件抢去执行那个插件的任务,那么3d动画的任务就会被阻塞,当插件任务执行完将cpu还给3d动画时,中间已经停留了一段时间,这段时间呈现给用户的视觉就是很卡顿。

  • 不稳定

在单进程架构中,如果某一段程序陷入死循环,又或者某个插件崩溃,那么将导致整个浏览器崩溃,所以是非常不稳定的。

  • 不安全

因为在一个进程中,可以有多个线程。这个进程中的所有资源对于在这个进程中的所有线程是共享的。所以一旦某个恶意插件通过某个线程入侵的话,这个恶意插件就能获取这个进程中的所有资源信息,这里面就有可能有用户的账号和密码以及其他私密信息,后果可想而知是非常可怕的。

优点

节约资源

因为浏览器每创建一个进程,操作系统都会为这个进程开辟一块空间,所以创建的进程越多,操作系统分配的资源越多。如果只创建一个进程,就只会开辟一块空间。

多进程架构

启动多个进程,每个进程可以有多个线程,不同进程通过IPC机制进行通信。

缺点:

比较复杂,资源耗费较多

优点

保持用户界面高响应度。保证UI线程不被其他费时的操作阻碍从而影响对用户的操作响应。

4、多进程的线程分工

browser进程

管理和调配子进程,负责浏览器页面的展示,标签的管理,负责其他进程的创建和销毁工作。

renderer进程

负责页面的渲染,脚本执行,时间处理,主要有一下几个线程

  • GUI渲染线程

主要负责网页的渲染工作

  • js引擎线程

主要负责解析和处理js脚本

  • 事件触发线程

控制轮询事件的执行。当事件达到触发条件时,事件就会被放进js引擎的执行任务队列中,等待被执行。

  • 定时器触发线程

定时器的计时工作不是由js引擎执行的,是事件触发线程去计时的 。计时完成后,事件触发线程会将定时器的回调事件放入js引擎的执行任务队列中,等待被执行。

  • 异步http请求线程

当请求完成后 ,如果有回调函数,事件触发线程就会将事件放入js引擎的执行任务队列中,等待被执行

插件进程

加载插件,比如众所周知的flash插件

GPU进程

最多只有一个,只有当GPU硬件加速被打开的时候进程才会被创建,主要用于3D绘图。

网络进程

发起网络请求(早期在browswer进程中)

5、实例分析

image

当浏览器收到用户的操作请求时,浏览器进程的UI线程就会将任务进行解释然后传递给IO线程。Browser进程的任务经过IO线程传递给Renderder进程的IO线程。renderer进程的IO线程收到任务,然后进行简单的解释再继续交给渲染进程,然后渲染进程就开始渲染。这其中可能会有获取资源的操作,也有可能需要执行3d动画 ,所以在渲染的过程中 ,需要Browser进程和GPU进程的协助才能顺利完成渲染。最后renderer进程将渲染完的结果经IO线程传递给Browser进程,Browser进程收到结果后将结果展示在浏览器页面上,整个过程就这样。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享