linux 性能优化之路: 深入了解几种linux上下文切换
Posted 李昊轩的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 性能优化之路: 深入了解几种linux上下文切换相关的知识,希望对你有一定的参考价值。
上下文切换是什么?
上下文切换是对任务当前运行状态的暂存和恢复
CPU为什么要进行上下文切换?
当多个进程竞争CPU的时候,CPU为了保证每个进程能公平被调度运行,采取了处理任务时间分片的机制,轮流处理多个进程,由于CPU处理速度非常快,在人类的感官上认为是并行处理,实际是"伪"并行,同一时间只有一个任务在运行处理。
上下文切换主要消耗什么资源,为什么说上下文切换次数过多不可取?
根据 Tsuna 的测试报告,每次上下文切换都需要几十纳秒到到微秒的CPU时间,这些时间对CPU来说,就好比人类对1分钟或10分钟的感觉概念。在分秒必争的计算机处理环境下,浪费太多时间在切换上,只能会降低真正处理任务的时间,表象上导致延时、排队、卡顿现象发生。
上下文切换分几种?
- 进程上下文切换
- 线程上下文切换
- 中断上下文切换
什么情况下会触发上下文切换?
- 系统调用
- 进程状态转换(运行、就绪、阻塞)
- 时间片耗尽
- 系统资源不足
- sleep
- 优先级调度
- 硬件中断等
线程上下文切换和进程上下文切换的最大区别?
线程是调度的基本单位,进程是资源拥有的基本单位
,同属一个进程的线程,发生上下文切换,只切换线程的私有数据,共享数据不变
,因此速度非常快。
中断上下文切换,如何理解?
为了快速响应硬件的事件(如USB接入),中断处理会打断进程的正常调度和执行,转而调用中断处理程序,响应设备事件。而打断其它进程执行时,需要进行上下文切换。中断事件过多,会无谓的消耗CPU资源,导致进程处理时间延长。
有哪些减少上下文切换的技术用例?
数据库连接池(复用连接)、合理设置应用的最大进程,线程数、直接内存访问DMA、零拷贝技术
以上是关于linux 性能优化之路: 深入了解几种linux上下文切换的主要内容,如果未能解决你的问题,请参考以下文章