多个进程竞争CPU的时候,并没有真正运行,为什么会导致负载升高呢?CPU上下文切换就是罪魁祸首。
Linux是一个多任务操作系统,支持远大于CPU数量的任务同时运行。当然,这些任务实际上并不真的在同时运行,而是在很短的时间内,将CPU轮流分配给他们,造成多任务同时运行的错觉。
CPU寄存器和程序计数器,就是用来处理这些事情的。CPU寄存器,是CPU内置的容量小、但速度极快的内存。程序计数器,则是用来存储CPU正在执行的指令位置、或者即将执行的下一条指令位置。它们都是运行任何任务前,必须依赖的环境,因此也被叫做CPU上下文。
CPU上下文切换就是先把一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。
根据任务不同,CPU的上下文切换可以分为进程上下文切换、线程上下文切换和中断上下文切换。
小结
不管哪种场景导致的上下文切换,你都应该知道:
1.CPU上下文切换,是保证Linux系统正常工作的核心功能之一,一般情况下不需要我们特别关注。
2.过多的上下文切换,会把CPU时间消耗在寄存器、程序计数器以及虚拟内存等数据的保存和恢复上,从而缩短真正运行的时间,导致系统的整体性能大幅下降。