进程上下文切换与线程上下文切换的区别
线程上下文切换
线程上下文切换在同一个进程中从一个线程切换到另一个线程。线程上下文切换非常有效且成本更低,因为它只涉及程序计数器,寄存器和栈指针的切换。线程上下文切换的成本与进入和退出内核的成本大致相同。
进程上下文切换
进程切换是一种上下文切换,它涉及将进程资源与新进程所需的资源进行切换,这意味着要切换内存地址空间,页表和内核资源,处理器中的缓存等。
区别
线程上下文切换 | 进程上下文切换 |
---|---|
当CPU保存线程的当前状态并切换到同一进程的另一个线程时,就会发生线程上下文切换。 | 操作系统的调度程序保存正在运行的程序的当前状态(包括进程控制块的状态)并切换到另一个程序时,就会发生进程上下文切换。 |
线程上下文切换有助于CPU同时处理多个线程。 | 进程上下文切换涉及加载新程序的执行状态。 |
线程上下文切换不涉及内存地址空间的切换,处理器占用的所有内存地址都保存下来。 | 进程上下文切换涉及地址空间的切换,处理器占用的内存地址都会被刷新。 |
处理器的缓存和TLB会保留它们的状态。 | 处理器的缓存和TLB被刷新。 |
虽然线程上下文切换涉及寄存器和栈指针的切换,但它们不改变地址空间,因此效率更高。 | 进程上下文切换涉及地址空间的更改,因此效率较低。 |
线程上下文切换更快消耗更低。 | 进程上下文切换较慢且成本较高。 |