完成端口IO模型
时间:2022-04-22
本文章向大家介绍完成端口IO模型,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
IOCP(IO完成端口)是一种伸缩性的IO模型,广泛应用于各种类型的高性能服务器,如Apache等。
IO完成端口,应用程序使用线程池处理异步IO请求的一种机制。
最初设计:
应用程序发出一些异步IO请求,设备驱动把这些工作项目排序到完成端口,在完成端口上等待线程池便可以处理这些完成IO。
完成端口实际上是一个WINDOWS IO结构,可以接收多种对象的句柄。
1 创建完成端口对象
调用CreateIoCompletionPort函数创建一个完成端口对象,winsock使用这个对象为任意数量的套接字句柄管理IO请求
HANDLE CreateIoCompletionPort(
HANDLE FileHandle, //关联的套接字句柄
HANDLE ExistingCompletionPort,//创建完成端口的对象句柄
ULONG_PTR CompletionKey,//指定一个句柄唯一的数据
DWORD NumberOfConcurrentThreads//同时执行线程数量
);
此函数作用:1 创建完成端口对象 2 将一个或者多个句柄关联到IO完成端口对象
例子:
HANDLE hCompletion = ::CreateIoCompletionPort(INVALID_HANDLE_VALUE,0,0,0);
2 IO服务器线程和完成端口
关联套接字之前,创建一个或者多个工作线程,在完成端口上执行并处理投递到完成端口上的IO请求
3 完成端口和重叠IO
在套接字上投递重叠发送和接收请求处理IO。
IO操作完成后,系统向完成端口对象发送一个完成通知封包。
IO完成端口以 先进先出的方式排队
BOOL GetQueuedCompletionStatus(
HANDLE CompletionPort, //完成端口对象句柄
LPDWORD lpNumberOfBytes,//取得IO操作期间
PULONG_PTR lpCompletionKey,
LPOVERLAPPED* lpOverLapped,
DWORD dwMilliseconds
);
- 详细讲解Quartz.NET
- android AlarmManager讲解
- Intent和PendingIntent的区别
- android程序崩溃后重启
- jQuery源码——.html()方法原理解析
- 【翻译】JavaScript内存泄露
- 【翻译】ES6生成器简介
- 浅谈事件冒泡
- Github page搭建博客使用自定义插件的方法
- 【翻译】JavaScript中5个值得被广泛使用的数组方法
- 【翻译】浏览器渲染Rendering那些事:repaint、reflow/relayout、restyle
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
- 《JQuery技术内幕》读书笔记——自调用匿名函数剖析
- 【代码+论文】通过ML、Time Series模型学习股价行为
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- GitHub通过access token来clone代码
- 在.NET Core中使用MongoDB明细教程(1):驱动基础及文档插入
- 探索闭包
- openresty实现接口签名安全认证
- JavaScript空值合并运算符
- ROS1&2极简版安装配置案例(Noetic&Foxy@Ubuntu20.04)
- Java调用微信扫一扫
- 响应式布局新方案:融合响应式设计,开源 React 组件
- C++核心准则E.26:如果无法抛出异常,尽快进行失败处理
- 学习|C#的EventHandler的委托使用
- 性能分析(5)- 软中断导致 CPU 使用率过高的案例
- C++核心准则E.27:如果无法抛出异常,系统化运用错误处理代码
- C++核心准则E.28:避免基于全局状态的错误处理(例如errno)
- Docker推送镜像到Hub服务器
- C++核心准则E.30:不要使用抛异常声明