1、IOCP
IOCP(完成端口)是迄今为止最为复杂的一种I/O模型。然而,假若一个应用程序同时需要管理为数众多的套接字,那么采用这种模型,往往可以达到最佳的系统性能!但不幸的是,该模型只适用于Windows NT和Windows 2000操作系统。因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千个套接字的时候,而且希望随着系统内安装的CPU数量的增多,应用程序的性能也可以线性提升,才应考虑采用IOCP。要记住的一个基本准则是,假如要为Windows NT或Windows 2000开发高性能的服务器应用,同时希望为大量套接字I/O请求提供服务,那么I/O完成端口模型便是最佳选择!
2、应用
从本质上讲,IOCP要求创建一个windows对象,该对象通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。创建IOCP的API函数:
CreateIoCompletionPort(
__in HANDLE FileHandle,
__in_opt HANDLE ExistingCompletionPort,
__in ULONG_PTR CompletionKey,
__in DWORD NumberOfConcurrentThreads
);
该函数能实现两个截然不同的目的:(1)创建一个IOCP对象;(2)将一个句柄与IOCP关联在一起。
创建一个对象时,比较使人感兴趣的参数是NumberOfConcurrentThreads。该参数的特殊之处在于:在IOCP上同时允许执行线程的数量。通常将其设为0,表示有多少个处理器,则允许同时允许多少个线程。下面语句将创建一个IOCP:
::CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
其结果是返回一个句柄,用来对端口进行标识。