重叠IO是windows提供的一种异步读写文件的机制
正常读写文件(socket本质就是文件操作),如:recv, 是阻塞的, 将协议缓冲区中的数据全部复制到buffer里, 同一时间只能执行一个。
重叠IO异步读写, WSARecv, 操作系统单独开一个线程去读, 可以连续投递多个WSARecv
typedef struct _WSAOVERLAPPED {
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
WSAEVENT hEvent;
} WSAOVERLAPPED, *LPWSAOVERLAPPED;
2.保留, 供服务提供商定义使用(一般是接收或发送的字节数)
异步选择:消息和socket绑定, 系统以消息机制反馈处理
事件选择:事件和socket绑定, 系统以事件机制反馈处理
重叠IO:重叠结构和socket绑定, 系统以重叠IO机制反馈处理
调用:AcceptEx WSAReccv WSASend 投递
调用WSAWaitForMultipleEvents获取事件信号
对事件检测进行优化, 创建线程将用户分组放在里面检测
调用:AcceptEx WSAReccv WSASend 投递
20000客户端同时连接普通电脑:CPU上升40%
我们自己等待每个事件, 分配任务, 循环次数多, 延迟
系统根据具体时间自动调用我们写好的代码, 自动分类
客户端连续多次Send, 只会产生一次接收消息, 一次接收完所有数据(不重要)