Thread.sleep()的CPU消耗

Fed*_*ssi 0 java multithreading jvisualvm

在Sample Samples选项卡中查看,在CPU Samples子选项卡下,我看到最常用的方法是java.lang.Thread.sleepnative.

我有大约30个线程与相对sleep()调用.但这是什么意思呢?

我平均报告的CPU消耗是7%,是Thread.sleep()真的使用了70%的时间吗?

怎么可能,这是一种"真正的"消费吗?

Sim*_*nni 7

通常,采样器只会检查每个给定时间您的程序正在做什么,并报告您的程序在给定方法中多少次(并通过简单的乘法给出一个近似的时间).

这通常与实际CPU负载无关.

例如,一个sleep()调用暂停线程,因此你的代码几乎没有加载CPU,但是,如果我有一个只启动的程序,睡眠10分钟并结束,那么它的采样将告诉你我认为Thread.sleep消耗了100%的CPU时间.

这同样适用于IO操作,其中您的线程正在等待数据从某处(可能是远程Internet主机,或仅仅是您的磁盘)到达,并且没有显着加载CPU,但仍然是采样器(正确)告诉你,大部分时间都花在IO方法中,即使CPU本身没有做那么多.

  • 它不是"假的"..它是你的程序花费时间的地方,这并不意味着在那段时间内CPU是100%,它可能是你的应用程序在给定方法中花费的时间,在CPU级别什么都不做. (3认同)