IOCP

Linux epoll 与 Windows IOCP比较 前言 epoll 和 IOCP(IO Completion Ports) 分别是 Linux 和 Windows 系统上的高效网络模型。相比其他网络模型,同样是 polling 方式,这两种模型有如下特点: 在系统资源允许下,监控的文件描述符没有上限。 多线程同时监视和修改文件描述符是可行的,少量的线程即可实现支持大量连接的服务端程序。 这两种模型的事件通知会有一定开销。如果应用程序不需要太多的客户端连接,select 和 poll 是更合适的模型。epoll 和 IOCP 的设计目的是应付成千上万的连接 阅读详情
IOCP 完成端口,其本质就是一个在windows平台下管理IO操作的自定义线程池。
其实完成端口是一个队列,所有的线程都在等消息出现,如果队列里有消息,就每个线程去获取一个消息执行它。
先用函数CreateIoCompletionPort来创建一个消息队列,然后使用GetQueuedCompletionStatus函数来从队列获取消息,使用函数PostQueuedCompletionStatus来向队列里发送消息。
通过这三个函数就实现完成端口的消息循环处理。


CreateIoCompletionPort函数结构如下:
HANDLE WINAPI CreateIoCompletionPort(
  _In_      HANDLE FileHandle,
  _In_opt_  HANDLE ExistingCompletionPort,
  _In_      ULONG_PTR CompletionKey,
  _In_      DWORD NumberOfConcurrentThreads
);
FileHandle文件句柄
ExistingCompletionPort 完成端口句柄
CompletionKey 绑定的一个数据指针,在C++封装中,可以传递一个this指针,在GetQueueCompletionStatus函数返回时又可以拿到这个类的this指针,从而可以完成在
完成端口线程中调用类中的方法。
CreateIoCompletionPort 作用:创建一个完成端口对象


GetQueuedCompletionStatus函数结构如下:
BOOL WINAPI GetQueuedCompletionStatus(
  _In_   HANDLE CompletionPort,
  _Out_  LPDWORD lpNumberOfBytes,
  _Out_  PULONG_PTR lpCompletionKey,
  _Out_  LPOVERLAPPED *lpOverlapped,
  _In_   DWORD dwMilliseconds
);
CompletionPort 完成端口句柄
lpNumberOfBytes IO操作传输的字节数
lpCompletionKey 与完成端口绑定的一个数据指针,其在调用CreateIoCompletionPort创建完成端口时指定的一个自定数据结构。
GetQueuedCompletionStatus 则是从一个被排队的完成状态(IO操作完成通知)的队列中获取一个完成状态。


PostQueuedCompletionStatus函数结构如下:
BOOL WINAPI PostQueuedCompletionStatus(
  _In_      HANDLE CompletionPort,
  _In_      DWORD dwNumberOfBytesTransferred,
  _In_      ULONG_PTR dwCompletionKey,
  _In_opt_  LPOVERLAPPED lpOverlapped
);
CompletionPort 完成端口句柄


PostQueuedCompletionStatus 函数是用来向这个类似消息循环的循环中发送自定义的“消息”的,当然,它不是真正的消息,而是一个模拟的“完成状态”,用以激活完成端口,使其调用GetQueuedCompletionStatus获取完成状态。


http://www.cppfans.org/1089.html


Windows下的IOCP模型(二):IOCP使用示例 一 我对IOCP的使用     IOCP以异步处理网络I/O事件、优秀的线程调度等机制,成为Windows环境下性能最优秀的网络通信模型之一。但结合不同的应用场景,IOCP也需要合理的使用方式才能发挥其性能优势。     前段时间需要开发一个Windows环境下的网络通信综合集成系统,作者通过IOCP模型,设计实现了一个用于网络通信的底层模块,这个模块同时支持tcp、udp、广播、udp组播等多种通信方式,每种通信方式对应不同的事件处理机制,能够支持高性能的网络通信,并为上层模块提供服务。 二 支持多通信方 阅读详情

相关推荐

完成端口IOCP实现高并发服务器——一篇非常好的学习资源

IOCP 实现高并发服务器demo+详解 转载自https://www.cnblogs.com/talenth/p/7068392.html

IOCP技术详解

这几周我接触了Windows网络通讯中的IOCP模型,自己在网上找了相关的知识进行学习,自己又下了好多服务器端的代码,但都运行不了,也是自己菜,能力还需加强。幸好我师父资助了我一个能运行的服务端IOCP代码,自己参照网上的相关知识后又与这个能运行的代码做了参照,算是勉强理解了构造IOCP的一般方法,对IOCP的使用也有了很大的心得。接下来我就把自己对IOCP相关知识的理解记录下来,方便自己以后的复习,当然这篇文章如果对正在阅读的你有帮助也算是很好的。...

StarWang的博客 5798

IOCP完成端口详解(pdf文档+源码).rar

IOCP完成端口详解(pdf文档+源码) 包含有完成端口的详细介绍,以及在VC下成功应用完成端口的源代码,非常适合学习和掌握完成端口编程技术。 从网上下载的,放在优快云上面,也给自己做一个备份。

IOCP模型与EPOLL模型的比较

一:IOCP和Epoll之间的异同。异:1:IOCP是WINDOWS系统下使用。Epoll是Linux系统下使用。2:IOCP是IO操作完毕之后,通过Get函数获得一个完成的事件通知。Epoll是当你希望进行一个IO操作时,向Epoll查询是否可读或者可写,若处于可读或可写状态后,Epoll会通过epoll_wait进行通知。3:IOCP封装了异步的消息事件的通知机制,同时封装了部分IO操作。但E...

weixin_30511039的博客 1177

第七章 Wi-Fi连接过程

系列文章目录 第一章 国内下载AOSP最新源码的方法 第二章 下载AOSP WiFi相关的代码 第三章 将源码导入Android Studio(无需编译idegen) 文章目录系列文章目录前言一、Wi-Fi连接是什么?二、Wi-Fi连接的过程1. 手动连接总结 前言 Wi-Fi连接分为下面几种过程,每种的流程都有些许差异: 手动连接 自动连接 在BSS之间漫游 Passpoint热点连接 一、Wi-Fi连接是什么? Wi-Fi连接是指STA(手机)连接到AP(无线路由器)的过程,这个过程分为链路

Frank.Zhang的专栏 2527

电流采样(分流器与霍尔传感器)

霍尔效应霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数。简单原理如图1所示,半导体薄片两端通以控制电流I,垂直方向施加磁感应强度为B的匀强磁场,d为半导体材料的厚度,k为霍尔常数,它与半导体材质有关,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压,它们之间的关系为。霍尔元件。

weixin_48867130的博客 1万+

IOCP 浅析

http://www.ibm.com/developerworks/cn/java/j-lo-iocp/ 简介: 传统的 Server/Client 实现都是为每个请求创建独立的线程,处理一个客户的请求。但这种实现在客户端请求并发量巨大的情形下效率低下,于是出现了 IOCP(Input/Output Completion Port)。本文从 IOCP 的基本概念和思想出发,比较 IOCP

hertz2007的专栏 1008

闲置服务器之代理服务器篇

这台服务器是在阿里云免费白嫖的,天工开物计划,阿里给的300块无门槛优惠券,买了一台新加坡的境外服务器,288,刚刚抵扣完,因为是境外服务器,能够访问一些国内不能访问的网站,所以本文章仅从技术的角度来搭建代理服务器,使用时,请自觉遵守国家相关规定,如有任何违法行为,与本人无任何关系!!!。本文使用tinyproxy来搭建代理服务器。

m0_50281408的博客 2104

完成端口(IOCP)详解[2/2](转载)

版权声明:本文为优快云博主「PiggyXP」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.youkuaiyun.com/piggyxp/article/details/6922277 五 使用完成端口的基本流程 说了这么多的废话,大家都等不及了吧,我们终于到了具体编码的时候了。 使用完成端口,说难也难,但是说简单,其实也简单 ---- 又说了一句废话=。= 大体上来讲,使用完成端口只用遵循如下几个步骤: 1 调用 CreateIoComplet

xupeng1644的博客 2050

如何利用GMS构建地下水数值模拟模型?

第一步:点图中三维网格的图标然后点Grid→Create Grid这个界面是用于创建一个有限差分网格的设置窗口。它允许你定义网格在三维空间中的范围、分辨率以及其他相关属性。这个界面提供了一个直观的方式来定义一个三维的有限差分网格,你需要指定每个维度上的范围、划分的单元格数量,以及一些控制单元格大小分布和网格方向的参数。这个网格通常会被用于数值模拟,例如地下水流模拟。在点击 "OK" 之前,请务必仔细检查所有参数是否符合你的建模需求。1. X-Dimension (X 轴维度)2. Y-Dimension (

weixin_44259522的博客 2093

Rust 与 Golang 深度对决:从语法到应用场景的全方位解析

Rust 定义函数以fn关键字开头,参数需明确指定类型,返回值类型紧跟在箭头->之后。// 定义函数add,接收两个i32类型参数a和b,返回i32类型结果,功能为两数相加a + bRust 和 Golang 各有千秋,在不同领域展现独特优势。Rust 凭借强大的内存安全与高性能,在系统编程、网络编程以及对内存安全和性能要求高的场景中表现突出;Golang 则以简洁语法和出色并发性能,在云计算、分布式系统、Web 开发等领域占据一席之地。

muyouking 1770

什么是IOCP

关于什么是IOCP的描述

weixin_40301728的博客 4257

【漏洞复现】爱数云盘 Usrm_GetAllUsers 未授权访问漏洞

爱数 AnyShare存在未授权漏洞,未授权的攻击者可以通过该漏洞获取用户名信息。

qq_67810151的博客 3121

浅浅的分析一手——IOCP

尽量简单的带大家初步了解IOCP模型

empty_me的博客 1755

基于STM32、HAL库的RN8209D电能计量芯片驱动程序设计

/ 假设电压互感器变比为220V:0.5V,电流互感器变比为20A:5mA。// 电压ADC原始值。// 电流ADC原始值。// 有功功率(W)// 电能(kWh)

corlin6688的博客 470

【WRF-Urban数据集】中国60个城市的1 km分辨率城市冠层参数(UCPs)

中国60个城市的1 km分辨率城市冠层参数(UCPs)

WW、forever的博客 1068

c++——iocp模型

IOCP有一个队列,当你要发数据时,收数据和连接时,都交由IOCP队列处理,不会与操作系统底层交互。  该函数实际用于两个明显有别的目的: 5.4.3 向IOCP队列投递接受连接的请求 5.4.4 检测队列,从队列中取出完成的请求 5.4.5 投递一个队列完成状态 6. 示例 服务端 客户端...

www_dong的博客 5667

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IOCP简介

1.1 环境要求本文读者需要熟悉C++、TCP/IP、Socket编程、MFC,和多线程。源码使用Winsock 2.0和IOCP技术,要求:Windows NT/2000或以上:要求Windows NT3.5或以后版本Windows 95/98/ME:不支持Visual C++.NET,或完整更新过的Visual C++ 6.01.2 摘要当 你开发不同类型的软件,你迟早必须处理C/S的开发。对...

weixin_33979363的博客 4188

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IOCP原理

要想彻底征服IOCP,并应用好IOCP这个模型,首先就让我们穿越到遥远的计算机青铜器时 代(以出现PC为标志),那时候普通的PC安装的还是DOS平台,微软公司主要靠这个操作系统在IT界的原始丛林中打拼,在DOS中编写程序,不得不与很 多的硬件直接打交道,而最常操作的硬件无非是键盘、声显卡、硬盘等等,这些设备都有一个特点就是速度慢,当然是相对于PC平台核心CPU的速度而言,尤其 是硬盘这个机械电子设

markman101---神即是道 道法自然 如来 3218

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IOCP实现步骤

IOCP 实现步骤       如果懂得了 IOCP 的工作原理,它实现起来是很简单的。 它的实现步骤如下: 1.   创建好 IOCP 2.   创建 Socket ( socket 可以是由 Accept 得到) 3.   将 Socket 关联到 IOCP 4.   socket 向 IOCP 提交各种所需请求 5.   IOCP 操作完成之后将结果返回给 soc

zuiyuezhou888的专栏 2323

IOCP踩坑

IOCP函数 创建IOCP句柄和关联套接字到IOCP句柄,都是通过CreateIoCompletionPort 创建IOCP句柄 HANDLE iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); 关联套接字到IOCP句柄 CreateIoCompletionPort((HANDLE)fd, iocp, 0, 0); ...

HW的博客 1911

什么是IOCP?

什么是IOCP?转载: 理解I/O Completion Port    欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证你明白IOCP的一切,但我会尽我最大的努力。以下是我会在这篇文章中提到的相关技术:  I/O端口  同步/异步  堵塞/非堵塞  服务端/客户

水上漂的专栏 1602

IOCP完整例子

本文是我在学习IOCP的时候,第一次写一个完整的例子出来,当然了,参考了优快云上一些朋友的博客,大部分都是按照他们的思路写的,毕竟我是初学者,参考现成的学起来比较快。当然了,真正用到项目中的IOCP肯定不止这么简单的,还有内存池,环形缓冲区,socket连接池等高端内容,后面我会参考一些例子,写出一个完整的给大家看。 /************************************************************************ FileName:iocp.h Autho

xupeng1644的博客 1864

IOCP小结

一. IOCP完成端口I/O模型 当应用程序必须一次管理多个套接字时,完成端口模型提供了最好的系统性能。这个模型也提供了最好的伸缩性,它非常适合用来处理上百上千个套接字。 IOCP模型是事先开好了N个线程,存储在线程池中,让他们hold。然后将所有用户的请求都投递到一个完成端口上,然后N个工作线程逐一地从完成端口中取得用户消息并加以处理。这样就避免了为每个用户开一个线程。既减少了线程资源,又提高了线程的利用率。 1. 什么时候完成端口(completion port)对象 I/O完成端口是应用程序使用线程

xupeng1644的博客 1618
上一篇: Chrome MessageLoop类分析
下一篇: Breakpad 跨平台崩溃报告系统 入门指南
Superr爬爬虫
博客等级 码龄19年 72粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值