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

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

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

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

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

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

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

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

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