博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

iocp

Posted on 2012-03-18 17:56  qianyz  阅读(210)  评论(0编辑  收藏  举报

调用 GetQueuedCompletionStatus函数,某个线程就会等待一个完成包进入到完成端口的队列中,而不是直接等待异步I/O请求完成。线程 (们)就会阻塞于它们的运行在完成端口(按照后进先出队列顺序的被释放)。这就意味着当一个完成包进入到完成端口的队列中时,系统会释放最近被阻塞在该完 成端口的线程。(自己用线程池来模拟完成端口的话,主要的性能问题会在这里出现,操作系统调度线程的算法和完成端口调度线程的算法相反。)
最有效的假想是发生在有完成包在队列中等待,而没有等待被满足,因为此时完成端口达到了其并发量的极限。此时,一个正在运行中的线程调用 GetQueuedCompletionStatus时,它就会立刻从队列中取走该完成包。这样就不存在着环境的切换,因为该处于运行中的线程就会连续不 断地从队列中取走完成包,而其他的线程就不能运行了。