前言
判断一个程序属于IO密集型还是计算密集型有利于后续对程序进行并行优化,尤其是Cpython解释器下的python程序(GIL锁)。本文将先介绍判断方法,再结合一个实际案例进行分析。
上下文切换
上下文切换一般指用户态和内核态间的切换,通常切换的发生是因为用户程序在运行过程中产生了系统调用。在Linux中,上下文切换可分为自愿上下文切换(voluntary_ctxt_switches)和非自愿上下文切换(nonvoluntary_ctxt_switches),自愿上下文切换如字面意思,是一种主动的行为,通常是程序主动地产生了系统调用行为,如IO操作,IO操作越多,自愿上下文切换次数越多。非自愿上下文切换和前者相反,它更多体现为“被切换”、“被中断”,我们知道操作系统会通过相应硬件产生时钟脉冲中断进行进程调度,那么一个程序计算得越久,它被时钟脉冲信号“中断”、被剥夺时间片给其他进程的次数就越多,因此非自愿上下文切换的次数越多,基于此我们就可以初略判断一个程序属于IO密集型还是计算密集型。
在Linux中,进程的上下文切换信息存储在/proc/${PID}/status文件中,${PID}表示当前进程的进程号,因此在目标程序运行结束前开一个子进程去找到有关ctxt_switches的信息就可以分析出当前进程属于IO密集型还是计算密集型。
来验证一下,我服务器搭了个NodeJs服务,FTP用得比较多,一般用来上传下载文件,目前运行了2年多左右,理论上应该属于I

最低0.47元/天 解锁文章
2748

被折叠的 条评论
为什么被折叠?



