我编写了一个 C++ 库,它执行一些非常繁重的 CPU 工作(所有数学和计算),如果留给它自己的设备,将很容易消耗 100% 的所有可用 CPU 资源(它也是多线程的,以达到可用逻辑的数量)机器上的核心)。
因此,我在使用该库的软件应该调用的主计算循环内有一个回调:
while(true)
{
//do math here
callback(percent_complete);
}
在回调中,客户端调用 Sleep(x) 来减慢线程速度。
最初,客户端代码是固定的 Sleep(100) 调用,但这会导致性能不可靠,因为有些机器比其他机器更快地完成数学运算,但所有机器上的睡眠都是相同的。所以现在客户端检查系统时间,如果已经过去超过 1 秒(这 == 几次迭代),它将休眠半秒。
这是减慢线程速度的可接受的方法吗?为了最大限度地提高性能,我应该使用信号量/互斥量而不是 Sleep() 吗?每 1 秒的处理睡眠 x 毫秒是否正常,还是有什么问题我没有注意到?
我问的原因是,尽管 Taskman 显示该进程占用了约 10% 的 CPU,但机器仍然严重陷入困境。我已经探索了硬盘和内存争用,但没有成功,所以现在我想知道我减慢线程速度的方式是否导致了这个问题。
Thanks!
为什么不为计算线程使用较低的优先级?这将确保调度其他线程,同时在不需要运行其他线程的情况下允许计算线程尽可能快地运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)