前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CPU占用率100%的解决方法

CPU占用率100%的解决方法

原创
作者头像
用户3148533
修改2018-09-05 17:28:02
3K0
修改2018-09-05 17:28:02
举报
文章被收录于专栏:解决发现

原因:

代码语言:txt
复制
   建立连接后启动新的线程,如果线程中有简单粗暴的不含阻塞的while(1)循环,会持续占用CPU,导致CPU占用率极高。

解决:

代码语言:txt
复制
   在while(1)的大循环中插入一句sleep(1),即阻塞1毫秒,java线程内则使用Thread.sleep()的静态方法阻塞线程。效果奇佳如图(用C语言演示)

图:优化前(我的电脑是四核cpu,所以单线程无限无阻塞循环占用率不会达到100%)

图:优化后

分析:

代码语言:txt
复制
   这个问题几乎有可能出现在所有持续运作的程序上。虽然只是阻塞了程序一毫秒,但是如果循环内的运算量不大的话,阻塞一毫秒几乎让出了整个CPU的运算资源,还不影响程序的运行。理想情况下,假设原本执行一次循环只需要消耗10个CPU周期的话,如果不进行阻塞,2Ghz的CPU在一秒内会执行2*10^9/10=2*10^8次的循环,然而在1秒内执行那么多次循环对我们的程序一点帮助都没有,还会抢占CPU资源;而阻塞该程序1ms后,相当于每进行一次循环后就让出1ms的运算资源,也就是让出2*10^6个cpu周期,原本占用100%的程序只会占用不到1万次CPU周期,这对于2Ghz的CPU来说几乎是0负担的。以前我混过ACM竞赛,往往敲的代码都是追求指定的时间内完成大规模数据的运算,所以,在while循环中是绝对不可能出现sleep()这种拖时间的代码的,然而,程序在实际应用中,一个小小的sleep()还是必不可少的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档