完成端口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
);
- PHP开发过程的那些坑(三) ——PHParray_shift函数
- CSS3弹性盒布局
- iBatis.Net(4):DataMapper API
- PHP开发过程的那些坑(四) ——PDO bindParam函数
- iBatis.Net(3):创建SqlMapper实例
- PHP开发过程的那些坑(五) ——PHP的empty()
- iBatis.Net(2):基本概念与配置
- ASP.NET Web API中的依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析
- 解决Entity Framework查询匿名对象后的跨域访问的一种方式
- WebSocket在ASP.NET MVC4中的简单实现
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式第一种方法第二种方法第三种方法
- Unity Container中的几种注册方式与示例1.实例注册2.简单类型注册
- 使用Unity创建依赖注入依赖注入生命周期:注册、解析、销毁 注册解析销毁
- 使用WCF进行跨平台开发之三(JAVA调用WCF服务)1.开发必备2.生成WCF客户端3.开发程序4.结束语
- 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 数组属性和方法
- 函数式编程是如何提升代码的扩展性
- 浏览器中的跨域问题与 CORS
- 微信小程序怎么做链接可以链到小程序的其它页面。
- 如何实现一个 3D 效果的魔方
- FlutterDojo设计之道—状态管理之路(三)
- 微信头像加国旗
- FlutterDojo设计之道—状态管理之路(四)
- FlutterDojo设计之道—状态管理之路(五)
- Python高级进阶(一)Python框架之Django入门
- python 自动化测试(2):针对密码输入框为密码控件时的解决方案
- 微信小程序开发之视图容器swiper
- WINDOWS服务器同时安装多个版本的MYSQL的方法,MQYSQL5和MQYSQL8的共存。
- 使用PHP对接国外的PAYPAL支付最新REST API接口。
- golang 学习(10): 使用go语言调用c语言的so动态库
- Django的form,model自定制