接下来开始做有关嵌入式就业方向的八股文

帮助大家顺利理清面试中可能出现的问题,同时也让我更好的夯实自己的基础

话不多说,开始吧

今天讲的是线程和进程的区别

进程

资源分配的基本单位

每个进程拥有独立的地址空间:内存空间、堆、全局变量、文件句柄、信号、外设权限

进程完全隔离,一个进程崩溃不会直接干掉其他进程

进程是一个独立的单位,需要恢复的上下文内容比较多消耗的资源也比较多

线程

进程中的执行单元,cpu执行和调度的基本单位

共享进程的地址空间

线程出现问题可能会导致整个程序崩溃从而影响其他的线程

线程消耗的资源比较少

进程的范围>线程

对比图

对比维度 进程 线程
定义 操作系统资源分配最小单位,独立程序运行实例 CPU 调度最小执行单元,进程内部执行流
资源占用 独立完整内存、文件、端口资源;创建开销大;进程间无共享资源 共享进程全部全局资源;仅私有栈 / 寄存器;创建开销极小;线程间直接共享数据
容错性 强隔离,单个进程崩溃不影响其他进程 无隔离,一个线程崩溃,整个进程全部退出
调度 老式系统调度单元,调度粒度粗,现代内核不再以进程为最小调度单元 现代操作系统 CPU 最小调度单位,调度粒度细,支持多核并行
上下文切换 开销巨大,切换地址空间、刷新缓存、更换页表 开销很小,不切换地址空间,仅切换少量寄存器与栈

进程之间的通信有几种方式:(进程之间地址空间完全隔离,不能直接读写对方内存,必须依靠操作系统提供的 IPC 机制中转,这就是为什么需要专门的通信方式)

1、管道

2、命名管道

3、共享内存(mmap)

4、信号量

5、消息队列

6、套接字(socket)

7、信号

需要借助内核,不存在完全脱离内核的进程通信方式

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐