经典老番 进程和线程
进程
一个进程基本就是一个程序的运行实例,进行中的程序 =》进程
- 它代表了一整套程序运行的环境
- 程序运行的需要的一块内存
- 内存中存放代码,运行数据和执行任务的主线程
进程与线程
- 进程启动和管理线程
- 线程不能单独存在
- 进程中任意线程出错都会导致进程整体崩溃
- 线程共享进程数据
- 进程之间则相互隔离
- 单个崩溃不影响其他
- 但进程间沟通也需要专门的 IPC
- 进程关闭/结束之后,所占用的内存会被操作系统回收
- 即使操作不当的内存泄露也会被回收
比方式理解
- 早期 linux 系统中进程的名字是 Job
- 线程的名字是 Work
- 很容易理解,一个岗位(Job)自然包括了很多具体的工作事务(Work)
- 比如说,一个开发,日常活动中占用时间精力最多的活动可能是和产品吵架以及和联调的前后端吵架
浏览器中的进程
以 chrome 为例
- 浏览器进程,也是主进程,显然也有一个主线程
- 渲染进程,排版引擎 Blink 和 JS 引擎 V8 都在这个进程中
- 每个 tab 页面都有一个渲染进程
- 看 chrome 自己的统计,一般都有一个备用渲染进程
- GPU 进程,gpu 绘制的流程促使线程的独立
- 网络进程,过去也在主进程之后
- 插件进程,避免容易崩溃的插件影响浏览器
- 现在存储进程也很常见
- chrome 会根据设备条件自动调整分割进程,不太行的设备就多合并