为什么CPU使用率在启动/停止线程后不断增加
本文关键字:线程 不断增加 CPU 使用率 启动 为什么 | 更新日期: 2023-09-27 18:02:36
我有一个程序,在一个按钮的点击,一个新的线程将被创建(如果它不存在已经),并连接到相机建立。现在考虑相同的流程,但是有N个摄像机(因此在点击时创建N个线程)。再次单击按钮后,所有之前创建的线程被告知停止执行(通过布尔标志),然后在每个线程上调用Join(500) -结束所有线程。
现在,我注意到在短时间间隔内执行的连续单击不仅会增加CPU使用率(正常情况下,当8个线程正在运行时),而且即使在线程从Join(500)调用结束后,也会使CPU使用率保持在同一水平。
是什么原因导致线程连接后CPU使用率仍然很高?
(注:我也尝试了TPL的Task.WaitAll()实现并观察到相同的场景,所以我想说这不是由线程以某种方式不停止执行引起的。)
编辑:Thread[] m_threads = new Thread[8];
void Start()
{
for (int i = 0; i < m_threads.Length; i++)
{
m_threads[i] = new Thread(() =>
{
while (m_continue) { ... }
});
}
}
bool m_continue = false;
void Stop()
{
m_continue = false;
for (int i = 0; i < m_threads.Length; i++)
{
m_threads[i].Join(500);
}
}
在第一次点击时调用Start,而在下一次点击时调用Stop。
尝试更改
bool m_continue = false;
volatile bool m_continue = false;
根据你的描述,我假设m_continue得到缓存(在寄存器或其他),因此永远不会改变,即使你在Stop()方法中分配它。