进程是拥有资源的集合体,而线程是执行操作的单位。关系很像公司中部门和人员的关系。每个部分都有不同的资源,而部门中的人员则使用资源完成任务。
当只有一个线程的时候,线程等于进程 当有多个线程的时候,线程共享虚拟内存,全局变量等资源,这些资源上写文切换时不需要更改。 线程有自己的单独数据,栈和寄存器重存储的内容,切换需要保存。
切换理由: 前后2个线程属于不同进程,等同于进程的切换 前后2个线程属于同进程,切换只需要保存私有数据
相比进程的切换,将要节省更多资源
当有硬件事件,例如在键盘打字,就会中断当前进程,响应硬件设备。中断切换并不涉及进程用户态,不需要保存和恢复虚拟内存,全局变量等用户态资源。只保存内核态,中断服务程序执行所必须的状态,包括cpu寄存器,内核堆栈,硬件终端参数等。
同cpu中,中断优先级最高,所以中断切换和进程之前切换并不会同时发生。
1.检查上下文切换情况
vmstat
cs(context switch)是每秒上下文切换的次数 in(interrupt)则是每秒中断的次数 r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数 b(Blocked)则是处于不可中断睡眠状态的进程数
2.每个进程的上下文切换情况
pidstat -w 5
cswch(voluntary context switches)每秒自愿上下文切换的次数 是指进程无法获取所需资源,导致的上下文切换,例如I/O、内存等系统资源不足时
nvcswch(non voluntary context switches)每秒非自愿上下文切换的次数 指进程由于时间片已到,有优先级更高的进程启动等原因,被系统强制调度从而切换。当大量进程抢夺cpu时,就容易发生此类切换。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。