找回密码
 新注册用户
搜索
查看: 4886|回复: 6

用 Sleep 休眠行不行?

[复制链接]
发表于 2007-2-18 19:48:11 | 显示全部楼层 |阅读模式
用 API 函数 Sleep。

Sleep 1000 就可以休眠 1 秒。

假设程序可设置的最大CPU占用率为 10% - 100%,假设用户设为 90%,则表示每 1 秒里,就要有Sleep 100。需要注意的是,这里是每一秒里有 100 毫秒是 Sleep,也就是每执行 0.9 秒就 Sleep 100。而不是每执行一秒后才 Sleep,因为此时的实际休眠时间已经少于 10% 了(约9%)。

因为很多程序的每一个计算周期都是不确定的,所以很难精确保证在某一时间间隔后进行休眠。但其实休眠只是体现平均值,没必要 100% 的每一秒内都进行休眠。只要把每个计算周期保持在一两秒内的水平就可以了。每过完一个周期,就计算本周期所用的计算时间,然后计算出等量的需要休眠的毫秒数,然后进行休眠即可。比如本周期运行了 1.3 秒,那按 90% 的最大占用率来算,那本周期过后就需要Sleep 144 才能进入下一周期再计算了(144约等于:1300/90%-1300)。

先凑合着吧。总好过老100% 好。

但这里的占用率是假设其它程序不占用的情况下的。比如程序设 90%,虽然它会剩 10%,但假如有其它软件占了 10% 的话,那CPU 实际上还是在100%的。
回复

使用道具 举报

发表于 2007-2-19 08:58:55 | 显示全部楼层
我认为还是有必要的。
很快就到夏天了,对于那些火炉级的CPU,象P4等,发热量太大,全天100%运行对电脑是个考验。如果可以半速运行,情况就会好很多。(我在广东,前几天已经穿衬衣了)
如果可以半速运行,也可以较少对杀毒软件的影响,我的几个同事就是因为运行pi时杀毒太慢就吧pi给删除了。
建议设置成自定义的方式,比如说100%运行,75%运行,50%运行自行选择。
回复

使用道具 举报

 楼主| 发表于 2007-2-19 11:00:24 | 显示全部楼层
引用 gy-ygf 在 2007-2-19 08:58 时的帖子:
我认为还是有必要的。
很快就到夏天了,对于那些火炉级的CPU,象P4等,发热量太大,全天100%运行对电脑是个考验。如果可以半速运行,情况就会好很多。(我在广东,前几天已经穿衬衣了)
如果可以半速运行,也可 ...


是呀。但其实不是 PI 抢了杀毒软件的资料,只是现在的杀毒软件都“智能”起来了,发现 CPU 占用率太高时就主动让资源。。。。比如我的瑞星,以前都还是会抢UD资源的,但不记得是由 2006还是2007版开始,就主动放资源给UD了,搞得我每次都要让UD长时间休眠然后才杀毒,杀完了再恢复UD运行。不直接关UD的原因是不想浪费任何一秒。因为一个任务包里是包含很多个运算周期的,一个运算周期没完成的话,是不会保存的,如果此时关闭的话,那下次启动时这个运算周期就会重新开始,一般来说都是会浪费几分钟的。UD就是这样,比如这次关闭时显示的是运行了1小时50 分钟,那下次启动时一开始可能会变成1小时40多分钟,因为上一次花了分钟并没有运算完那一个周期,所以那几分钟不算数了。
回复

使用道具 举报

发表于 2007-2-19 12:51:46 | 显示全部楼层
没有那么简单的,Windows不是实时系统
类似的技术有一定作用,但并非紧迫性的改进。对于一个已经部署的系统是不适当的
而且有类似的第三方软件可以实现

除非能找到官方的相关技术文档,目前暂时不考虑加入类似的功能
回复

使用道具 举报

 楼主| 发表于 2007-2-19 23:50:28 | 显示全部楼层
引用 JUST 在 2007-2-19 12:51 时的帖子:
没有那么简单的,Windows不是实时系统
类似的技术有一定作用,但并非紧迫性的改进。对于一个已经部署的系统是不适当的
而且有类似的第三方软件可以实现

除非能找到官方的相关技术文档,目前暂时不考虑加入类 ...


大概用户们所要求的占用率控制,并不是去控制整机的占用率,是控制软件本身的最大占用率。如果只是控制软件本身的话,那用 Sleep 就可以了吧, Sleep 正是为此而生的。

如果说程序带上能控制整机 CPU 占用率的功能的话,那才是太怪的功能了。就像是两轮摩托车有倒档一样。。。
回复

使用道具 举报

发表于 2007-2-20 11:10:41 | 显示全部楼层
现在主流cpu大约10秒左右存一次盘,也就是0.2%的计算量,可以增加一个选项,在也就是0.2%的计算量中适当停顿一会,比如2秒或4秒,这样同样达到在宏观上降低占用率的问题
回复

使用道具 举报

 楼主| 发表于 2007-2-20 20:35:42 | 显示全部楼层
原帖由 gy-ygf 于 2007-2-20 11:10 发表
现在主流cpu大约10秒左右存一次盘,也就是0.2%的计算量,可以增加一个选项,在也就是0.2%的计算量中适当停顿一会,比如2秒或4秒,这样同样达到在宏观上降低占用率的问题


约 10 作为一个周期的话,好像太长了。一两三秒是最适当的。主要是考虑在任务管理器上,大部分人不会注视着一个进程到 10 秒。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-4-25 15:01

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表