正如您自己说的那样,您可以点击H以显示用户线程。
只是以供将来参考(和乐趣),让我们计算的CPU利用率!
一点背景:
在现代操作系统中,有一个调度程序。它旨在确保所有进程及其线程都获得公平的计算时间份额。我不会安排太多时间(这确实很复杂)。但是最后有一个叫做运行队列的东西。在这里,所有进程的所有指令都将排队等待其执行。
任何进程都会将其“任务”放在运行队列中,一旦处理器准备就绪,它将弹出并执行它们。例如,当程序进入睡眠状态时,它将自己从运行队列中删除,并在准备再次运行时返回到“行尾”。
在这个队列排序与流程做优先级(也称为‘nice值’ -即一个过程是很好的关于系统资源)。
队列的长度决定了系统的负载。例如,负载为2.5意味着CPU可以实时处理的每个指令有2.5条指令。
顺便说一下,在Linux上,此负载的计算间隔为10ms(默认情况下)。
现在来看CPU使用率的百分比值:
假设您有两个时钟,一个被称为时钟,t
它代表实时时钟。它每秒测量一秒钟。我们打电话给另一个时钟c
。它仅在有处理要执行时运行。这意味着,只有当进程计算出某些内容时,时钟才会运行。这也称为CPU时间。系统上的每个进程都具有其中之一。
现在可以为单个进程计算处理器利用率:
或对于所有过程:
在多核计算机上,这当然可以得到3.9的值,因为如果使用得当,CPU每秒可以计算出四秒钟的计算时间。
维基百科提供了以下示例:
在6-CPU UNIX计算机上运行的软件应用程序会创建三个UNIX进程来满足用户需求。这三个进程中的每一个都会创建两个线程。软件应用程序的工作均匀地分布在为该应用程序创建的6个独立的执行线程上。如果不涉及等待资源,则预计总CPU时间将是实际经过时间的六倍。
这是一个执行此操作的小python代码段
>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %
在理想情况下,您可以由此推断系统负载为100-66.93 = 33,1%。(但实际上,由于诸如I / O等待,调度效率低下之类的复杂事情,这是错误的)
与负载相反,这些计算将始终得出0到处理器数量之间的值,即0到1或0到100%之间的值。现在无法区分运行100%cpu的三个任务的计算机和运行100万个任务的100万个任务的计算机。例如,如果您试图平衡多台计算机上的多个进程,则CPU利用率几乎是无用的。负载就是您想要的。
现在实际上,有多个处理时钟。例如,有一个等待I / O。因此,您还可以计算I / O资源利用率。
对于原始问题,这可能没有帮助,但我希望它很有趣。:)