我已经编写了一个C ++库,该库执行一些非常繁重的CPU工作(所有数学和计算),并且如果留给自己的设备使用,将很容易消耗所有可用CPU资源的100%(它也被多线程化为可用逻辑的数量)机器上的核心)。
这样,我在主计算循环中有一个回调,使用该库的软件应该调用该回调:
while(true)
{
//do math here
callback(percent_complete);
}
在回调中,客户端调用Sleep(x)减慢线程速度。
最初,客户端代码是固定的Sleep(100)调用,但是由于某些计算机比其他计算机更快地完成数学运算,所以导致性能不可靠,这很糟糕,但是睡眠在所有计算机上都是相同的。因此,现在客户端检查系统时间,如果超过了1秒(==多次迭代),它将休眠半秒。
这是减慢线程速度的可接受方法吗?为了最大化性能,是否应该使用信号量/互斥量而不是Sleep()?每秒处理1毫秒x毫秒是否工作正常,还是我没有注意到某些错误?
我问的原因是,即使Taskman显示该进程占用了约10%的CPU,该计算机仍然陷入严重瘫痪。我已经探索过硬盘和内存争用无济于事,所以现在我想知道我减慢线程速度的方式是否导致了此问题。
谢谢!
为什么不对计算线程使用较低的优先级?这将确保安排其他线程,同时在不需要运行其他线程的情况下允许您的计算线程尽可能快地运行。
实际上,多数民众赞成在Windows上不是很可靠。我已经将该库移植到OS X,