4

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

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

4

2 回答 2

5

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

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

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

于 2012-02-18T19:02:39.213 回答
3

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

消耗的资源只是线程存在的原因:堆栈、记录的任何内核资源、保存的寄存器等。现在,如果您所说的线程没有使用 ManualResetEvent,而是使用等待循环某种,那么肯定。

现在,WaitHandle 不是一个实现。它只是抽象的 API。不知道 WaitHandle 的其他实现如何工作。

于 2012-02-18T18:58:21.183 回答