深入解析IOCP

http://cczjp89.blog.51cto.com/2707533/823158


1. 介绍

1.1 高并发服务器

(1)要求大规模的连接/会话可能同时进行

(2)列子:Web服务器邮件服务器

 

1.2 线程池架构

(1) 每个连接分配一个线程,将导致过多的线程。

(2) 线程消耗内存,比如堆栈等等。

(3) 操作系统创建和关闭线程,都将花费很多的时间在线程之间的切换

 

2. 线程模型

2.1 基于会话模型

(1) 每个线程服务于一个客户端,比如HTTP会话。

(2) 线程被用于状态跟踪和CPU调度。

(3) 活跃线程的数量等于并发客户端会话的数量

2.2 基于I/O模型

(1) 将状态跟踪从CPU调度中分离出来。

(2) 线程是所有同质,仅为I/O调用保持状态。

(3) 一个线程可以服务于不同的会话,在不同的时刻。

(4) 一个会话可以被服务,通过不同的线程,在不同的时刻。

(5) 因此,从一个线程不是专门对于一个会话,仅仅专门对于一个I/O请求处理。

3. 基于I/O的线程调度

 

3.1 并发限制

(1) 线程是和CPU绑定

最大活跃线程的个数 == CPU个数

(2) 线程是和I/O绑定

最大的工作线程个数 >= I/O并行个数

(3) 根据实验/基准设置

3.2 线程池大小

(1) 线程是和CPU绑定

等于并发限制数

(2) 线程是和I/O绑定

最大的工作线程个数 >= I/O并行个数

(3) 根据实验/基准设置

3.3 查询系统信息

typedef struct _SYSTEM_INFO {

union {

DWORD dwOemId;

struct {

WORD wProcessorArchitecture;

WORD wReserved;

};

};

DWORD dwPageSize;

LPVOID lpMinimumApplicationAddress;

LPVOID lpMaximumApplicationAddress;

DWORD_PTR dwActiveProcessorMask;

DWORD dwNumberOfProcessors;

DWORD dwProcessorType;

DWORD dwAllocationGranularity;

WORD wProcessorLevel;

WORD wProcessorRevision;

} SYSTEM_INFO;

4. Win32 完成端口

4.1 什么是IOCP

是一个Win32 机制,方便于带有控制并发的服务器的并发执行。

4.2 IOCP做什么

(1) 一个Win32 内核对象。

(2) 有用于Windows NT 和 后面的执行。

(3) 帮助维持重复使用的内存池。

删除线程创建/终结负担

(4) 分配线程,控制并发

最小化的线程上下文切换

(5) 优化线程调度

提高CPU和内存缓冲的命中率

4.3 基本步骤

 

4.4 创建IOCP端口和关联设备

4.5 IOCP内部结构

 

Note:

(1) 等待线程采用LIFO调度,减少了线程上下文的切换。只要I/O请求完成的够慢,使一个线程能够处理他们,系统就始终唤醒同一个线程。

(2) 当一个设备的异步I/O请求完成时,系统检查是否有关联了完成端口。如果是,那么系统就想该设备的完成端口I/O完成队列加入完成的I/O请求。

(3) IOCP是一个内核对象,它的值和I/O完成队列的地址指针是相同的。

4.6 I/O完成队列

(1) 当有一个异步I/O完成时,内核将检查是否该设备已经关联了某个IOCP。如果是,则一个完成数据包将被添加到完成队列中。

 

(2) 获取完成I/O请求

 

(3) 人工投递I/O请求包

 

5. 线程管理

5.1 线程状态类型

 

5.2 线程状态转换

 

6. 基于I/O的并行服务器

6.1 程序流程图

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值