2024年3月27日发(作者:)
本文主要探讨一下windows平台上的完成端口开发及其与之相关的几个重
要的技术概念,这些概念都是与基于IOCP的开发密切相关的,对开发人员来讲,又不得
不给予足够重视的几个概念:
1) 基于IOCP实现的服务吞吐量
2)IOCP模式下的线程切换
3)基于IOCP实现的消息的乱序问题。
一、IOCP简介
提到IOCP,大家都非常熟悉,其基本的编程模式,我就不在这里展开了。在这里我
主要是把IOCP中所提及的概念做一个基本性的总结。IOCP的基本架构图如下:
如图所示:在IOCP中,主要有以下的参与者:
--》完成端口:是一个FIFO队列,操作系统的IO子系统在IO操作完成后,会把相
应的IO packet放入该队列。
--》等待者线程队列:通过调用GetQueuedCompletionStatus API,在完成端口上
等待取下一个IO packet。
--》执行者线程组:已经从完成端口上获得IO packet,在占用CPU进行处理。
除了以上三种类型的参与者。我们还应该注意两个关联关系,即:
--》IO Handle与完成端口相关联:任何期望使用IOCP的方式来处理IO请求的,必
须将相应的IO Handle与该完成端口相关联。需要指出的时,这里的IO Handle,可以是
File的Handle,或者是Socket的Handle。
--》线程与完成端口相关联:任何调用GetQueuedCompletionStatus API的线程,
都将与该完成端口相关联。在任何给定的时候,该线程只能与一个完成端口相关联,与最
后一次调用的GetQueuedCompletionStatus为准。
二、高并发的服务器(基于socket)实现方法
一般来讲,实现基于socket的服务器,有三种实现的方式(thread per request
的方式,我就不提了:)):
第一、线程池的方式。
使用线程池来对客户端请求进行服务。使用这种方式时,当客


发布评论