Linux通过上下文切换(ctxt_switches )判断程序属于IO密集型还是计算密集型

前言

判断一个程序属于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值