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