JUC多线程02--什么是上下文切换
上下文切换
即,不同线程之间的切换。
是存储和恢愎CPU 状态的过程,它使得线程执行能够从中断恢愎执行。
上下文切换是需要开销的。
线程切换只在多核 CPU 中才有
并不是,线程切换是CPU的功能,单核 CPU 也可以进行上下文切换。
CPU 执行线程的粒度是通过给分个线程分配时间切片来实现的。在单核时代,一个系统也会开很多程序,每个程序都会等待CPU来执行并不会等会某一个线程执行完毕。
比如单核时代玩 CS,可以边玩游戏边听千千静听。
CPU 通过切换时间分片来执行任务,切换前都会保存上一次任务的状态,这样下次再切回来的时候,可以继续执行当前这个状态。
这种保存再切换回来的操作,就是一次上下文切换。
查看上下文切换
在linux下,使用vmstat
进行查看:
执行:
shell
1 | vmstat 10 10 |
查看一下结果:
Code
1 | procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- |
如何减少上下文切换
既然上下文切换会导致额外的开销,因此减少上下文切换次数便可以提高多线程程序的运行效率。
减少上下文切换的方法有:
- 无锁并发编程
- CAS算法
- 使用最少线程和使用协程
- 协程,go 当中使用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 人话翻译机!
评论
Be the first person to leave a comment!