【发布时间】:2011-01-06 02:08:26
【问题描述】:
我编写了一个 C++ 库,它执行一些非常繁重的 CPU 工作(所有这些都是数学和计算),如果留给它自己的设备,很容易消耗 100% 的所有可用 CPU 资源(它也是多线程的数量机器上可用的逻辑核心数)。
因此,我在使用该库的软件应该调用的主计算循环内有一个回调:
while(true)
{
//do math here
callback(percent_complete);
}
在回调中,客户端调用 Sleep(x) 来减慢线程。
最初,客户端代码是一个固定的 Sleep(100) 调用,但这会导致性能不可靠,因为有些机器比其他机器更快地完成数学运算,但所有机器上的睡眠都是相同的。所以现在客户端检查系统时间,如果超过 1 秒(这 == 几次迭代),它会休眠半秒。
这是减慢线程速度的可接受方式吗?我应该使用信号量/互斥体而不是 Sleep() 以最大限度地提高性能吗?每 1 秒的处理工作睡眠 x 毫秒是否正常,或者有什么我没有注意到的错误?
我问的原因是,即使 taskman 显示该进程占用了大约 10% 的 CPU,机器仍然严重陷入困境。我已经探索过硬盘和内存争用无济于事,所以现在我想知道我减慢线程的方式是否导致了这个问题。
谢谢!
【问题讨论】:
标签: c++ performance multithreading sleep cpu-usage