【问题标题】:Why the CPU time is different in other threads为什么其他线程的 CPU 时间不同
【发布时间】:2015-02-21 00:03:45
【问题描述】:

我为一个进程运行了 top -H -p,它给了我几个带有 LWP 的线程。 但是当我首先用最小的 PID 对结果进行排序时,我注意到第一个线程中的时间是恒定的,但其他线程的时间在变化。为什么 TIME+ 不一样?

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 16989 root 20 0 106m 28m 2448 S 0.0 0.2 0:22.31 glusterfs 16990 root 20 0 106m 28m 2448 S 0.0 0.2 0:00.00 glusterfs 16992 root 20 0 106m 28m 2448 S 0.0 0.2 0:00.00 glusterfs 16993 root 20 0 106m 28m 2448 S 0.0 0.2 0:00.00 glusterfs 16997 root 20 0 106m 28m 2448 S 0.0 0.2 0:11.71 glusterfs 17010 root 20 0 106m 28m 2448 S 0.0 0.2 0:21.07 glusterfs 17061 root 20 0 106m 28m 2448 S 0.0 0.2 0:00.00 glusterfs

【问题讨论】:

  • 第一个线程创建一个线程池,然后等待池中的线程完成真正的工作,这种模式并不少见。

标签: multithreading process cpu-time


【解决方案1】:

为什么 TIME+ 不同?

因为不同的线程在做不同百分比的工作。这可能有多种原因1,但最有可能的是应用程序 (glusterfs) 未尝试在工作线程之间均匀分配工作。

这没什么好担心的。如果工作级别(参见 %CPU)可以忽略不计,则哪个线程执行工作并不重要。


1 - 如果有人有时间和兴趣,他们可以查看 glusterfs 的源代码以尝试了解其行为。但是,我认为没有必要这样做。

【讨论】:

    【解决方案2】:

    因为时间列是指一个进程消耗的时间,所以当一个进程时间没有改变时,可能意味着这个进程正在“休眠”或者只是在等待另一个进程完成,但可能还有更多原因。

    http://linux.about.com/od/commands/l/blcmdl1_top.htm

    时间:

    任务自启动以来使用的总 CPU 时间。如果累积模式 开启,这还包括进程的子进程使用的 CPU 时间 已经死了。您可以使用 S 命令行设置累积模式 选项或使用交互式命令 S 切换它。标题行 然后将更改为 CTIME。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-08
      • 2016-05-16
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多