gpt4 book ai didi

.net - RegisterWaitForSingleObject 与 AutoResetEvent

转载 作者:行者123 更新时间:2023-12-03 12:52:55 24 4
gpt4 key购买 nike

我在 RegisterWaitForSingleObject 中阅读过:
http://www.albahari.com

而且我不明白我什么时候更喜欢使用 AutoResetEvent 而不是 RegisterWaitForSingleObject?

似乎我们总是可以使用 RegisterWaitForSingleObject,而且它比 AutoResetEvent 更好,因为它不绑定(bind)到线程。

最佳答案

你在比较一个苹果和一个橘子。 RWFSO 需要一个等待句柄。就像一个 AutoResetEvent。 RWFSO 所做的是优化对事件的等待。没有它,您将需要调用事件的 WaitXxx() 方法。

调用 WaitOne() 会阻塞线程,直到事件为 Set()。这是您希望在线程池线程中避免的事情,因为阻塞的 TP 线程会阻止其他已调度的 TP 线程快速执行。线程池管理器尝试优化正在运行的 TP 线程的数量,因此执行的 TP 线程不会多于 cpu 内核。阻塞线程有点搞砸了,经理不够聪明,无法知道线程阻塞的原因。只有当阻塞 TP 线程半秒没有进展时,管理器才允许另一个等待的 TP 线程执行。

RWFSO 非常好,但肯定并不总是合适的。使用它进行编程相当笨拙,尤其是当您想要处理异常时。如果您需要取消它,就会有一个令人讨厌的隐含竞赛。当事件发出信号时运行的 TP 线程会受到相同类型的 TP 调度延迟。而且没有RegisterWaitForMultipleObjects(),线程通常需要使用WaitAny()。直观地说:一个事件告诉线程准备就绪,另一个事件告诉线程退出。

关于.net - RegisterWaitForSingleObject 与 AutoResetEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com