为什么切换线程比切换进程开销小

首先要明白进程是什么:

  关于进程的定义有很多,一个经典的定义是一个执行中程序的实例,进程是程序的动态表现。  一个程序进行起来后,会使用很多资源,比如使用寄存器,内存,文件等。每当切换进程时,必须要考虑保存当前进程的状态。状态包括存放在内存中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量以及打开的文件描述符的集合,这个状态叫做上下文(Context)。可见,想要切换进程,保存的状态还不少。

其次就要了解线程是什么:

  线程存在于进程中,一个进程可以有一个或多个线程。线程是运行在进程上下文中的逻辑流,简单说,线程可以理解为一个方法(Java)或函数(C),这个线程可以独立完成一项任务。同样线程有自己的上下文,包括唯一的整数线程ID, 栈、栈指针、程序计数器、通用目的寄存器和条件码。可以理解为线程上下文是进程上下文的子集

由于保存线程的上下文明显比进程的上下文小,因此系统切换线程时,必然开销更小。

内容来自CSAPP chapter 8 & 12

  

原文地址:https://www.cnblogs.com/yvkm/p/10619001.html