IOCP
IOCP 常称 I/O完成端口。 IOCP模型属于一种通讯模型,适用于(能控制并发执行的)高负载服务器的一个技术。 通俗一点说,就是用于高侠侣处理很多很多的客户端进行数据交换的一个模型。 或者可以说,就是能异步I/O操作的模型
基本概念
IOCP全程I/O Completion Port, 中文译为I/O完成端口。 IOCP是一个异步I/O的API, 它可以高效地将I/O事件通知给应用程序。与使用select()或是其他异步方法不同的是,一个套接字socket与一个完成端口关联起来, 然后就可以继续进行正常的winsock操作了。 然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到此完成端口
IOCP模型的优缺点
优点
1 帮助维持重复使用的内存池。(与重叠I/O技术有关)
2 去除删除线程创建/终结负担。
3 利于管理,分配线程,控制并发,最小化的线程上下文切换。
4 优化线程调度,提高CPU和内存缓冲的命中率。
缺点
理解以及编码的复杂度较高。对使用者有一定要求
需了解一下基本知识
1 同步与异步
逻辑上来讲做完一件事后再去做另一件事就是同步, 而同时一起做两件或两件以上事的就是异步了。
2 阻塞与非阻塞
3 重叠I/O技术
4 多线程
5 栈 队列这两种基本的数据结构
相关API
1 与socket相关
1.1 链接套接字动态链接库: int WSAStartup(...);
1.2 创建套接字库: SOCKET socket(....);
1.3 绑定套接字: int bind(....);
1.4 套接字设为监听状态: int listen(...);
1.5 接收套接字: SOCKET accept(...);
1.6 向制定套接字发送消息: int send(...);
1.7 从制定套接字接收消息: int recv(...);
2 与线程相关
2.1 创建线程: HANDLE CreateThread(...);
3 重叠I/O技术相关
3.1 向套接字发送数据 int WSASend(...);
3.2 向套接字发送数据包 int WSASendTo(...);
3.3 从套接字接收数据 int WSARecv(...);
3.4 从套接字接收数据包 int WSARecvFrom(...);
4 IOCP相关
4.1 创建/关联完成端口: HANDLE WINAPI CreateloCompletionPor(.....);
4.2 获取队列完成状态: BOOL WINAPI GetQueuedCompletionStatus(...);
4.3 投递一个队列完成状态: BOOL WINAPI PostQueuedCompletionStatus(...);