CPU利用时间片轮询来为每个任务都服务一定的时间,然后把当前任务的状态保存下来,继续服务下一个任务。任务的状态保存及再加载就叫做线程的上下文切换。
在一个进程内部可以有多个线程在同时运行,并与创建它的进程共享同一地址空间和其它资源。
上下文:批线程切换时CPU寄存器和程序计数器所保存的当前线程的信息。
寄存器:指CPU内部容量较小但速度很快的内存区域(与之相对应的是CPU外相对较慢的RAM主内存)。寄存器通过对常用值(常为运算的中间值)的快速访问来加快计算机程序的速度。
程序计数器:是一个专用的寄存器,用于表明指令序列中CPU正在执行的位置,存储的值为正在执行的指令的位置或下一个将被执行的指令的位置,这依赖于特定的系统。
上下文切换
上下文切换指的是内核(OS的核心)在CPU上对进程或线程进行切换。上下文切换过程中的信息被保存在进程控制块(PCB ,Process Control Block)中。PCB又被称作切换帧(SwitchFrame)。上下文切换的信息会一直被保存在CPU的内存中。直到被再次使用。上下文切换流程如下:
(1)挂起一个进程,将这个进程在CPU中的状态(上下文信息)存储于内存的PCB中。
(2)在PCB中检索下一个进程的上下文并将其在CPU的寄存器中恢复。
(3)跳转到程序计数器所指向的位置(即跳转到进程被中断时的代码),并恢复该进程。
时间片轮转方式使多个任务在同一CPU上的执行有了可能。
引起线程上下文切换的原因
- 当前正在执行的任务完成,系统CPU正常调度下一个任务。
- 当前正在执行的任务遭遇I/O等阻塞操作,调度器挂起此任务,继续调度下一个任务
- 多个任务并发抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续调度下一个任务。
- 用户的代码挂起当前任务,比如线程执行sleep方法,而让出CPU。
- 硬件中断。
来源:CSDN
作者:超级大超越
链接:https://blog.csdn.net/u012632105/article/details/104750582