obsidian/笔记文件/2.笔记/IOCPNet网络库开发.md
2025-03-26 00:02:56 +08:00

1.7 KiB
Raw Permalink Blame History

#unity/日常积累

IOCP介绍

输入输出完成端口Input/Output Completion PortIOCP, 是支持多个同时发生的异步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请求提供服务。

这个技术点算是通讯顶级的技术方案了。用的好,性能刚刚的。