第4章ICOP与可伸缩网络程序.pptVIP

  • 0
  • 0
  • 约5.55千字
  • 约 24页
  • 2016-08-21 发布于重庆
  • 举报
第4章ICOP与可伸缩网络程序

第4章 IOCP与可伸缩网络程序 IOCP(I/O completion port,I/O完成端口)是伸缩性最好的一种I/O模型。 4.1 完成端口I/O模型 WinSock完成端口I/O模型,一般是用在大型的服务程序里面,他的效率和功能是最强大的。如果你的服务程序需要管理几百甚至上千个Socket(海量连接)的话,如Apache,游戏服务器等,你应该采用完成端口I/O模型。 采用完成端口的好处是,操作系统的内部重叠机制可以保证大量的网络请求都被服务器处理,而不是像WSAAsyncSelect 和WSAEventSelect的那样对并发的网络请求有限制。 “完成端口模型是我最喜爱的一种模型。虽然其实现比较复杂(其实我觉得它的实现比用事件通知实现的重叠I/O简单多了),但其效率是惊人的。我在T公司的时候曾经帮同事写过一个邮件服务器的性能测试程序,用的就是完成端口模型。结果表明,完成端口模型在多连接(成千上万)的情况下,仅仅依靠一两个辅助线程,就可以达到非常高的吞吐量。”------一个IT人员的话. 不同I/O模式的性能测试结果: Windows网络编程模式有好几种,他们各有特点,实现起来复杂程度各不相同,适用范围也不一样。下图是Network Programming for Microsoft Windows 2nd 一书中对不同模式的一个性能测试结果。服务器采用Pentium 4 1.7 GHz Xeon的CPU,768M内存;客户端有3台PC,配置分别是Pentium 2 233MHz ,128 MB 内存,Pentium 2 350 MHz ,128 MB内存,Itanium 733 MHz ,1 GB内存。 结果分析大家可以看到:服务器,勿庸置疑,肯定是完成端口模式。那么客户端呢,当然也可以采用完成端口,但是不同模式是在不同的操作系统下支持的,看下图: 完成端口在Windows 98下是不支持的。关键的一点,客户端程序不是用来进行大规模网络响应的,客户端的主要工作应该是进行诸如图形运算等非网络方面的任务。所以,强烈推荐大家使用WSAAsyncSelect/ WSAEvevtSelect模式实现客户端,因为它实现起来比较直接和容易,而且他完全可以满足客户端编程的需求。 从本质上说,完成端口模型要求我们创建一个Wi n 3 2完成端口对象,通过指定数量的线程,对重叠I / O请求进行管理,以便为已经完成的重叠I / O请求提供服务。 要注意: 所谓“完成端口”,实际是Wi n 3 2、 Windows NT以及Windows 2000采用的一种I / O构造机制. 使用这种模型之前,首先要创建一个I / O完成端口对象,用它面向任意数量的套接字句柄,管理多个I / O请求。 IOCP只不过是用来进行读写操作,和文件I/O有些类似。 实现过程: 以下,分为以下几步来说明完成端口模型:? 1。函数 2。常见问题 3。步骤 4。例程 函数 我们在完成端口模型下会使用到的最重要的两个函数是: (1) CreateIoCompletionPort (2) GetQueuedCompletionStatus (1) CreateIoCompletionPort函数 CreateIoCompletionPort? 的作用是:创建一个完成端口对象;把一个IO句柄和完成端口关联起来。 HANDLE CreateIoCompletionPort ( HANDLE FileHandle, /* handle to file*/ HANDLE ExistingCompletionPort, /* handle to I/O completion port*/ ULONG_PTR CompletionKey, /* completion key*/ DWORD NumberOfConcurrentThreads /* number of threads to execute concurrently*/ ); 创建完成端口 通常可以使用以下简单的代码创建完成端口对象,获得完成端口的句柄: HANDLE CompletionPort = CreateIoCompletionPort(INVALID_HANDLE_VA

文档评论(0)

1亿VIP精品文档

相关文档