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