ManualResetEvent在处于等待状态时会消耗cpu吗?

时间:2012-02-18 18:40:17

标签: c# manualresetevent

更具体地说,上下文切换的性能下降是否适用于处于等待状态的线程?

在什么条件或情况下,ManualResetEvent或WaitHandle可能会消耗资源?

2 个答案:

答案 0 :(得分:5)

ManualResetEvent没有等待状态。可以在MRE上等待的唯一事情是线程。是的,当一个线程不执行它所做的事情,执行代码时,它会不必要地消耗大量宝贵的资源。一兆字节的虚拟内存和一些内核对象。与之相比,MRE消耗的单个内核对象是小土豆。

您通常希望使用线程池线程。

看看.NET 4.0中可用的内容。像ManualResetEventSlim(不基于OS对象)和Task类。

答案 1 :(得分:2)

对于ManualResetEvent,没有。线程实际上并不是循环,也不是任何东西。它只是引用了自己填充到ManualResetEvent的通知列表中。当另一个线程在ManualResetEvent上调用.Set时,另一个线程最终将等待的线程放回到活动队列中。

消耗的资源只是对线程存在的计算:堆栈,记录的内核资源,保存的寄存器等等。现在,如果你所说的线程没有使用ManualResetEvent,而是某种等待循环,然后肯定。

现在,WaitHandle不是一个实现。这是一个抽象的API。没有人知道WaitHandle的其他实现如何起作用。