VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1044|回复: 5

如何控制一个进程CPU的占用率?

[复制链接]

1

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-18 18:20:02 | 显示全部楼层 |阅读模式
比如说一个科学计算的程序,里面做的主要就是不停的循环计算,如果不做什么特殊处理,那么程序运行时候的CPU占用率一般都是100%,有没有什么办法可以控制他的占用率,最好是能够控制到某一个特定的百分比,杀毒软件MCAFEE查毒的时候就是可以控制CPU的占用率到一个特定的值,不一定很准确,大概在一个范围就行了。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-25 17:00:01 | 显示全部楼层
关注
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-25 17:45:02 | 显示全部楼层
降低线程优先级
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-25 18:00:09 | 显示全部楼层
你是要控制这个程序的CPU占用率还是要控制系统最终的CPU占用率呢?
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-25 19:00:01 | 显示全部楼层
采用两个线程,一个在跑循环,一个获取CPU使用率,当CPU占用达到指定值时,给跑循环的进程发送消息,让它暂时Sleep下来.

不过可能不符合你的要求!
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-25 19:15:01 | 显示全部楼层
/*
**************************************************************************
*
* This allows us to better catch runaway realtime processes that
* might otherwise hang the whole system (if they're POSIX realtime
* processes).
*
* We do this by getting a "lease" on CPU time, and then extending
* the lease every so often as real time elapses.  Since we only
* extend the lease by a bounded amount computed on the basis of an
* upper bound of how much CPU the code is "expected" to consume during
* the lease interval, this means that if we go into an infinite
* loop, it is highly probable that this will be detected and our
* process will be terminated by the operating system with a SIGXCPU.
*
* If you want to handle this signal, then fine... Do so...
*
* If not, the default is to terminate the process and produce a core
* dump.  This is a great default for debugging...
*
*
* The process is basically this:
*  - Set the CPU percentage limit with cl_cpu_limit_setpercent()
*      according to what you expect the CPU percentage to top out at
*      measured over an interval at >= 60 seconds
*  - Call cl_cpu_limit_ms_interval() to figure out how often to update
*      the CPU limit (it returns milliseconds)
*  - At least as often as indicated above, call cl_cpu_limit_update()
*      to update our current CPU limit.
*
* These limits are approximate, so be a little conservative.
* If you've gone into an infinite loop, it'll likely get caught ;-)
*
* As of this writing, this code will never set the soft CPU limit less
* than four seconds, or greater than 60 seconds.
*
*/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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