我有一个使用 WIN32 API 的 C 代码。
在我的程序中,主线程创建了很多事件(Using CreateEvent),然后为每个WaitForSingleObject的Event创建一个线程(Using CreateThread)。
创建大量 WaitForSingleObject 的线程会恶化主线程的性能吗?
我有一个使用 WIN32 API 的 C 代码。
在我的程序中,主线程创建了很多事件(Using CreateEvent),然后为每个WaitForSingleObject的Event创建一个线程(Using CreateThread)。
创建大量 WaitForSingleObject 的线程会恶化主线程的性能吗?
当线程等待 WaitForSingleObject 调用时,性能成本非常低。在发出它等待的对象发出信号之前,该线程根本不会被调度。设计一个程序有几个线程等待,做一些工作,然后再次等待是很正常的。
需要注意的成本是:
其他答案给出了很好的答案。但是,如果创建大量线程是一个问题,也许使用WaitForMultipleObjects
可能是一种替代方法。
您问题的“真实”答案实际上取决于“很多”是什么,以及每个线程在“触发”时应该做什么。如果不理解这一点,几乎不可能说出最佳解决方案是什么。因此,我建议另一种选择。
每当绩效是问题的一部分时,衡量、改变、衡量、改变、衡量就是要走的路。不要只是遵循互联网上的一些建议,认为“这个页面说这是正确的解决方案,所以我正在这样做”。魔鬼往往在细节中,所以有人发现在他们的情况下是正确的,在你的情况下可能不正确,因为线程内部的确切工作负载是不同的,例如。更复杂的是,计算机体系结构不断变化,所以今天的“正确”解决方案不一定是五年后的正确解决方案,或者五年前不是正确的解决方案。