Socket IO模型之IOCP

来源:互联网 发布:淘宝如何做数据包 编辑:程序博客网 时间:2024/06/01 19:52

    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);

    其结果是返回一个句柄,用来对端口进行标识。

 

原创粉丝点击