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