6

RegisterWaitForSingleObject()使用代替的优点/缺点是WaitForSingleObject()什么?

我知道的原因:

  1. RegisterWaitForSingleObject()使用操作系统中已有的线程池
  2. 在使用 的情况下,WaitForSingleObject()应该有一个自己的线程轮询事件。

唯一的区别是轮询与自动事件?或者这些之间是否有相当大的性能优势?

4

2 回答 2

15

这很简单,WaitForSingleObject() 阻塞了一个线程。它正在消耗一兆字节的虚拟内存,并且在被阻塞时没有对其进行任何有用的操作。在发出句柄信号之前,它不会唤醒并继续做有用的事情。

RegisterWaitForSingleObject() 不会阻塞线程。线程可以继续做有用的工作。当句柄发出信号时,Windows 会抓取一个线程池线程来运行您指定为回调的代码。您在 WFSO 调用后编写的相同代码。仍然需要一个线程来运行该回调,即等待线程,但它可以处理许多 RWFSO 请求。

所以最大的优势是你的程序可以使用更少的线程,同时仍然处理许多服务请求。缺点是完成代码开始运行可能需要更长的时间。而且由于该代码在另一个线程上运行,因此更难正确编程。另请注意,如果您已经使用重叠 I/O,则不需要 RWFSO。

于 2013-09-09T11:17:10.723 回答
3

它们服务于两种不同的代码模型。如果RegisterWaitForSingleObject您将在操作系统管理的线程池中的随机线程上获得异步通知回调。如果您可以像这样构造您的代码,它可能会更有效。另一方面,WaitForSingleObject是同步等待调用阻塞(因此“占用”)调用线程。在大多数情况下,这样的代码更容易编写,并且可能不太容易出现各种死锁和竞争条件。

于 2013-09-09T09:03:55.880 回答