- 进程是操作系统资源分配的基本单位,而线程是 CPU 调度和分配的基本单位
- 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是一个进程中的不同的执行路径
- 进程是执行的程序,线程是进程内的控制流。
进程是现代分时操作系统的工作单元,进程是执行的程序,这是一种非正式的说法。进程不只是程序代码,进程还包括当前活动,如程序计数器、进程堆栈和数据段。
操作系统内的每个进程表示,采用进程控制块(Process Control Block,PCB),它包含了许多与某个特定进程相关的信息:
- 进程状态:状态可以包括新的、就绪、运行、等待、停止等。
- 程序计数器:计数器表示进程将要执行的下个指令的地址。
- CPU 寄存器:根据计算机体系结构的不同,寄存器的类型和数量也会不同。它们包括累加器、索引寄存器、堆栈指针、通用寄存器和其他条件码信息寄存器。在发生中断时,这些状态信息与程序计数器一起需要保存,以便进程以后能正确的继续执行。
- CPU 调度信息:这类信息包括进程优先级、调度队列的指针和其他调度参数。
- 内存管理信息:根据操作系统使用的内存系统,这类信息可以包括基地址和界限寄存器的值、页表或段表。
- 记账信息:这类信息包括 CPU 时间、实际使用时间、时间期限、记账数据、作业或进程数量等。
- I/O 状态信息:这类信息包括分配给进程的 I/O 设备列表、打开文件列表等。
PCB 结构如下图:
每个线程是 CPU 使用的一个基本单元;它包括线程 ID、程序计数器、寄存器组和堆栈。。它与同一进程的其他线程共享代码段、数据段和其他操作系统资源,如打开文件和信号。每个传统或重量级进程只有单个控制线程,如果一个进程具有多个控制线程,那么它能同时执行多个任务,下图说明了传统单线程进程和多线程进程的差异:
对于多处理器体系结构,多线程的优点更大,因为线程可以在多处理核上并行运行。不管有多少可用 CPU,单线程进程只能运行在一个 CPU 上。
知乎上有一个对于 “线程和进程的区别” 的回答非常好,总结一句话是:
进程和线程都是一个时间段的描述,是 CPU 工作时间段的描述,只是颗粒不同罢了。
原文地址如下:线程和进程的区别是什么?
我正在打造一个帮助 Android 开发者们拿到更好 offer 的面试库————安卓 offer 收割基,欢迎 star,觉得不错的可以持续关注,有兴趣的可以一起加入进来和我一同打造。