RegisterWaitForSingleObject()
使用代替的优点/缺点是WaitForSingleObject()
什么?
我知道的原因:
RegisterWaitForSingleObject()
使用操作系统中已有的线程池- 在使用 的情况下,
WaitForSingleObject()
应该有一个自己的线程轮询事件。
唯一的区别是轮询与自动事件?或者这些之间是否有相当大的性能优势?
RegisterWaitForSingleObject()
使用代替的优点/缺点是WaitForSingleObject()
什么?
我知道的原因:
RegisterWaitForSingleObject()
使用操作系统中已有的线程池WaitForSingleObject()
应该有一个自己的线程轮询事件。唯一的区别是轮询与自动事件?或者这些之间是否有相当大的性能优势?
这很简单,WaitForSingleObject() 阻塞了一个线程。它正在消耗一兆字节的虚拟内存,并且在被阻塞时没有对其进行任何有用的操作。在发出句柄信号之前,它不会唤醒并继续做有用的事情。
RegisterWaitForSingleObject() 不会阻塞线程。线程可以继续做有用的工作。当句柄发出信号时,Windows 会抓取一个线程池线程来运行您指定为回调的代码。您在 WFSO 调用后编写的相同代码。仍然需要一个线程来运行该回调,即等待线程,但它可以处理许多 RWFSO 请求。
所以最大的优势是你的程序可以使用更少的线程,同时仍然处理许多服务请求。缺点是完成代码开始运行可能需要更长的时间。而且由于该代码在另一个线程上运行,因此更难正确编程。另请注意,如果您已经使用重叠 I/O,则不需要 RWFSO。
它们服务于两种不同的代码模型。如果RegisterWaitForSingleObject
您将在操作系统管理的线程池中的随机线程上获得异步通知回调。如果您可以像这样构造您的代码,它可能会更有效。另一方面,WaitForSingleObject
是同步等待调用阻塞(因此“占用”)调用线程。在大多数情况下,这样的代码更容易编写,并且可能不太容易出现各种死锁和竞争条件。