java – 为什么从无限循环切换到TimerTask会导致CPU使用率下降?
发布时间:2020-12-14 17:47:41 所属栏目:Java 来源:网络整理
导读:我写了一个守护进程,结构如下: while( true ) { // do some stuff Thread.sleep( 1000 );} 我注意到使用了非常大的CPU – 高达100%.我的生产服务器上有一个类似的守护进程几个月,同样的CPU问题. 昨天我重写了代码使用TimerTask.我立刻注意到我的开发箱CPU
我写了一个守护进程,结构如下:
while( true ) { // do some stuff Thread.sleep( 1000 ); } 我注意到使用了非常大的CPU – 高达100%.我的生产服务器上有一个类似的守护进程几个月,同样的CPU问题. 昨天我重写了代码使用TimerTask.我立刻注意到我的开发箱CPU使用率已经减少了.所以我决定部署到生产并使用Munin进行双重检查.以下是图表: 几点: 除了JVM,生产服务器上绝对没有其他的运行. 那么为什么Thread.sleep与TimerTask相比效率低下? 解决方法
我可以想到的三种可能性:
>你有很多线程做这个,他们是上下文切换所有的时间.使用计时器将意味着只有一个线程.另一方面,这意味着你一次只能执行一个任务. 一个刚刚执行Thread.sleep(1000)的简单循环应该是非常便宜的 – 这也应该很容易验证. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |