IOCPNet网络库开发
#unity/日常积累
IOCP介绍
输入输出完成端口(Input/Output Completion Port,IOCP), 是支持多个同时发生的异步I/O操作的应用程序编程接口。
IOCP特别适合C/S模式网络服务器端模型。因为,让每一个socket有一个线程负 责同步(阻塞)数据处理,one-thread-per-client的缺点是: 一是如果连入的客户多了,就需要同样多的线程; 二是不同的socket的数据处理都要线程切换的代价。
通常的办法是,线程池中的工作线程的数量与CPU内核数量相同,以此来最小化线程切换代价。
一个IOCP对象,在操作系统中可关联着多个Socket和(或)文件控制端。 IOCP对象内部有一个先进先出(FIFO)队列,用于存放IOCP所关联的输入输出端的服务请求完成消息。
请求输入输出服务的进程不接收IO服务完成通知,而是检查IOCP的消息队列以确定IO请求的状态。
(线程池中的)多个线程负责从IOCP消息队列中取走完成通知并执行数据处理;如果队列中没有消息,那么线程阻塞挂起在该队列。
这些线程从而实现了负载均衡。
IOCP 算是.Net里,相对来讲是属于AIO模型的,而常用的socket是BIO模型的,Netty技术是属于NIO模型的。
IOCP是windows平台最高效的通信模型,可以在一个应用程序同时管理为数众多的套接字,以达到最佳的系统性能!从本质上说,完成端口模型要求我们创建一个Win32完成端口对象,通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。
这个技术点算是通讯顶级的技术方案了。用的好,性能刚刚的。