如何初略判断一个进程是计算密集型还是 IO 密集型

发布于 2023-03-16 21:20:09 字数 1221 浏览 105 评论 0

一般来说计算密集型的进程会有较多的非自愿上下文切换(nonvoluntary context switch),而 IO 密集型的进程会有较多的自愿上下文切换(voluntary context switch)。

那么如何查看某个进程遭遇到的上下文切换数量呢?原来在 /proc/$PID/status 中有 voluntary_ctxt_switchesnonvoluntary_ctxt_switches 两个标签分别标示了自愿上下文切换和非自愿上下文切换的次数。

比如我们来看看 Emacs 是计算密集型还是 IO 密集型呢?

grep ctxt_switches /proc/$(pgrep emacs)/status
voluntary_ctxt_switches:        74840
nonvoluntary_ctxt_switches:     21080

可以看到自愿上下文切换次数比较多,因此可以 初步 推测为IO密集型,再比如我们自己写一个计算密集型的程序测试一下

int main() {
  while (1) {
  }
}

可以看到如下测试结果

lujun9972:UO/ $ /tmp/loop &
[1] 13247
lujun9972:UO/ $ cat /proc/13247/status |grep ctxt_switches
voluntary_ctxt_switches:        0
nonvoluntary_ctxt_switches:     401
lujun9972:UO/ $ cat /proc/13247/status |grep ctxt_switches
voluntary_ctxt_switches:        0
nonvoluntary_ctxt_switches:     470
lujun9972:UO/ $ cat /proc/13247/status |grep ctxt_switches
voluntary_ctxt_switches:        0
nonvoluntary_ctxt_switches:     519
lujun9972:UO/ $ cat /proc/13247/status |grep ctxt_switches
voluntary_ctxt_switches:        0
nonvoluntary_ctxt_switches:     1930

可以看到全都是非自愿上下文切换,符合预想的结果

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
29 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文