OS 八股文——进程与线程

一、何为进程和线程

进程

  • 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位。
  • 是操作系统结构的基础。
  • 进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程

  • 线程是操作系统最小的运算调度单位。
  • 线程包含在进程中,是进程中实际执行任务的单位。
  • 在一些操作系统中,线程也被称为轻量级进程

二、两者的区别

单位区别

  • 线程是进程的一部分,是进程内的实际执行单位,而进程则是操作系统分配资源的基本单位。

资源区别

  • 每个进程都有独立的地址空间和系统资源,而线程共享同一进程的地址空间和系统资源。

切换区别

  • 线程之间的切换比进程之间的切换更快,因为线程共享相同的上下文和资源。

通信区别

  • 线程间通信更加方便,可以直接读写共享内存,而进程间通信需要通过特定的机制(如管道、消息队列等)。

开销区别

  • 进程的创建和销毁比线程的开销更大。

独立区别

  • 进程是相对独立的,一个进程的崩溃不会影响其他进程,而线程是相互依赖的,一个线程的崩溃会导致整个进程的崩溃。

三、内存分配过程

进程分配内存过程

进程作为资源分配的基本单位,其内存分配通过虚拟内存管理实现。

1. 虚拟地址空间创建

进程创建时,操作系统分配独立的虚拟地址空间(通常32位系统为4GB,64位更大),包含代码段、数据段、堆和栈等逻辑分区。
虚拟地址通过内存管理单元(MMU) 转换为物理地址,实现进程间的内存隔离与保护。
 

2. 物理内存分配与映射

分页机制:将虚拟地址按固定大小(如4KB)划分为页,物理内存划分为页框。操作系统维护页表记录虚拟页到物理页框的映射关系。

按需分配:当进程首次访问某虚拟页时触发缺页中断,内核从物理内存或磁盘(Swap空间)加载数据到空闲页框,并更新页表。

3. 动态内存扩展

堆内存管理:进程通过系统调用(如malloc)请求动态内存时,内核根据算法(如伙伴系统)从堆区分配连续或非连续内存块。

4. 内存回收与碎片处理

进程终止时,其占用的所有物理页框被标记为空闲;运行期间释放内存时,通过空闲链表或位图管理回收的内存块。

外部碎片通过内存紧缩或分页机制缓解,内部碎片由固定分页大小导致,需算法优化。

线程的内存分配过程

线程作为执行调度的基本单位,共享进程的虚拟地址空间,但拥有私有栈和线程本地存储。

1. 栈内存分配

私有栈:每个线程启动时分配独立的栈空间(默认1~10MB),存储局部变量、函数调用链及返回值。栈帧随方法调用动态压入/弹出,无需显式管理。

2. 堆内存共享与优化

共享堆:线程通过进程的堆区分配对象,需同步机制(如锁)避免竞态条件。

线程本地分配缓冲区(TLAB):在堆的Eden区为每个线程预分配小块内存(默认占Eden 1%),避免频繁全局锁竞争,提升分配效率。若TLAB不足,则退化为全局堆分配。

四、使用场景

进程

高隔离性、稳定性

1、需要独立的地址空间和系统资源:如果任务需要运行在独立的环境中,不同任务之间的数据隔离较为重要,那么可以选择使用进程。

2、需要更高的安全性和稳定性:如果一个任务的崩溃不应该影响其他任务的正常运行,使用进程可以保证更高的安全性和稳定性。

典型场景:

1、直播平台的多服务隔离

直播平台需同时运行视频推流服务、弹幕处理服务等。每个服务作为独立进程运行,避免一个服务崩溃导致整体瘫痪。

例如:

视频推流进程使用 FFmpeg 编码并通过 RTMP 协议传输;

弹幕进程通过 WebSocket 独立处理消息队列;

进程间通信(IPC)可通过共享内存或消息队列传递控制信号。

2、跨硬件单元的视频编解码

由于一个开发板有不同的硬件单元,比如 ARM、NPU、FPGA、DSP什么的。但是每个硬件单元都是需要分配独立进程的。

例如:

ARM 负责视频采集,DSP 负责 H.264 编解码;

ARM 与 DSP 分属不同进程,通过 Codec Engine 机制交互,确保硬件资源独占性。

隔离 CPU 与 DSP 的运算负载,避免内存竞争导致的帧丢失。

线程

资源共享、高并发、低延迟

1、共享数据和资源:如果任务之间需要共享数据和资源,并且数据同步和通信较为频繁,使用线程可以更方便地访问和操作共享资源。

2、轻量级任务:如果任务比较轻量级,且并行执行可以提高效率,使用线程可以进行更快速的切换和调度,减少开销。

3、实时性要求:如果任务对实时性要求较高,使用线程可以更快响应事件和处理任务。

典型场景

1、视频传输中的多任务并行

局域网视频传输系统需同时处理 Socket 数据接收、解码、显示。

例如:

接收线程:持续监听 Socket 端口,将数据存入缓冲区;

解码线程:从缓冲区取数据,调用 H.264 解码器生成 YUV 帧;

显示线程:将 YUV 转换为 RGB 并渲染到屏幕。

2、直播流的实时处理

直播中需同时处理视频采集、美颜滤镜、网络推流。

例如:

采集线程:基于 V4L2 驱动(海思MPP,Sensor——VO——VPSS)从摄像头获取原始帧;

处理线程:应用 OpenCV 进行人脸识别或滤镜渲染;

推流线程:通过 RTMP 协议发送至 CDN

两者混用

兼顾隔离性与效率

典型场景:

智能监控系统的行为分析

进程级:视频采集、存储服务作为独立进程,保障 24/7 稳定性;

线程级:在采集进程内启动多个线程,分别处理人脸检测、运动跟踪、告警生成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值