操作系统如何区分进程、内核线程、用户线程、协程和纤程等概念?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2073个文字,预计阅读时间需要9分钟。
每个学习操作系统的学习者都不可避免地要接触线程、进程、协程、纤程等概念。针对这些概念,有许多经典问题,如进程与线程的区别等。一开始,我觉得有必要分析这些概念。
每一个学习操作系统的人都不可避免地要接触进程,线程(内核线程|用户线程),协程,纤程等概念。针对这些概念有很多经典的问题,诸如进程和线程的区别等等。一开始我觉得辨析这些概念似乎有纠结"茴"字有几种写法之嫌,对理解操作系统无益。但当我想要写一个自己的操作系统内核时,发现这些概念含混不清是我将真实操作系统中的技巧映射到自己代码的最大障碍。
目录- 1. 最经典:进程与线程的区别
- 2. 内核眼中的进程和线程
- 3. 内核线程与用户态线程
- 4. 协程,纤程和其它...
简单来说,进程是操作系统分配资源的最小单位,线程是操作系统调度的最小单位。
早期的操作系统并没有线程,进程是操作系统运行程序的最小单位,但随着多处理器的普及,进程这一抽象显得很笨重[1]:
- 创建进程需要独立的地址空间,载入数据和代码段,初始化堆栈。即使通过
fork()创建进程也需要大量拷贝。 - 由于地址空间的隔离,不同进程之间通信要么以页为单位维护公共映射,要么采用信号量等开销较大的进程间通信机制。
因此,当有一些轻量级的并发任务时,线程的概念呼之欲出:拥有独立的执行流但共享地址空间。
本文共计2073个文字,预计阅读时间需要9分钟。
每个学习操作系统的学习者都不可避免地要接触线程、进程、协程、纤程等概念。针对这些概念,有许多经典问题,如进程与线程的区别等。一开始,我觉得有必要分析这些概念。
每一个学习操作系统的人都不可避免地要接触进程,线程(内核线程|用户线程),协程,纤程等概念。针对这些概念有很多经典的问题,诸如进程和线程的区别等等。一开始我觉得辨析这些概念似乎有纠结"茴"字有几种写法之嫌,对理解操作系统无益。但当我想要写一个自己的操作系统内核时,发现这些概念含混不清是我将真实操作系统中的技巧映射到自己代码的最大障碍。
目录- 1. 最经典:进程与线程的区别
- 2. 内核眼中的进程和线程
- 3. 内核线程与用户态线程
- 4. 协程,纤程和其它...
简单来说,进程是操作系统分配资源的最小单位,线程是操作系统调度的最小单位。
早期的操作系统并没有线程,进程是操作系统运行程序的最小单位,但随着多处理器的普及,进程这一抽象显得很笨重[1]:
- 创建进程需要独立的地址空间,载入数据和代码段,初始化堆栈。即使通过
fork()创建进程也需要大量拷贝。 - 由于地址空间的隔离,不同进程之间通信要么以页为单位维护公共映射,要么采用信号量等开销较大的进程间通信机制。
因此,当有一些轻量级的并发任务时,线程的概念呼之欲出:拥有独立的执行流但共享地址空间。

