中文版 | English

网站首页 | 个人作品 | 站长日志 | 给我留言 | 经典分享 | 友情链接 | 黑白人生


完成端口大概流程

    1.初始化Winsock       2.创建一个完成端口       3.根据服务器线程数创建一定量的线程数       4.准备好一个socket进行bind然后listen       5.进入循环accept等待客户请求       6.创建一个数据结构容纳socket和其他相关信息       7.将连进来的socket同完成端口相关联       8.投递一个准备接受的请求       以后就不断的重复5至8的过程 IO完成端口(英文简称IOCP)可能是Windows内核编程中最复杂,最难理解的内核概念。然而,它又是如此强大,以至于它是Windows平台上实现专业大流量服务器软件的唯一合理模型。没办法,难也得啃啊!那么IOCP真是那么难吗?如何理解IO完成端口模式? 1、完成端口是一个内核对象,其操作方式类似一个队列(从其行为分析得到结论,真正如何实现的,谁看了win2000核心代码的告知一声),每个IO对象(如socket, file等)HANDLE通过CreateIoCompletionPort函数与完成端口中的一个数据上下文结点相关联;若干个工作线程与该完成端口相关联,处理队列中结点收到的数据。 2、当用户提交异步IO请求后会立即返回,由完成端口监视IO请求完成的事件(例如:有客户端连接上线了,有数据收到了,请求发送的数据发送完毕了等事件。这可能是完成端口名字的来由),并将相关信息添加到IO对象相应结点的OVERLAPPED结构中; 3、与该完成端口相关联的工作线程可以通过GetQueuedCompletionStatus函数从完成端口队列中获取收到的IO数据; 4、需要结束服务时,使用PostQueuedCompletionStatus函数向完成端口发送NULL结构,使关联的工作线程退出。



Copyright 1998-2021. All rights reserved.
工信部备案:冀ICP备19032940号-1|公安部备案号:13020802000209