五种WinSock I/O模型的特点及比较

Windows Socket五种I/O模型——代码全攻略 如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合考虑 阅读详情
======    select  模型:  
                   
               select模型是WinSock中应用最广泛的模型之一,核心就是select函数,它可用于  
       判断套接字上是否存在数据,或者能否向一个套接字写入数据。  
               这个函数可以有效地防止应用程序在套接字处于阻塞模式中时,send或recv进入  
       阻塞状态;同时也可以防止产生大量的WSAEWOULDBLOCK错误  
                 select的优势是能够从当个线程的多个套接字上进行多重连接及I/O。  
       这就避免了伴随阻塞套接字和多重连接的线程剧增  
 
======    WSAAsyncSelect  模型:  
 
               这个是我个人最喜欢的一个模型^_^    因为它也是以消息为基础的。  
               关键就是WSAAsyncSelect函数,将socket消息发送到hWnd窗口上,然后在那里  
       处理相应的FD_READ,FD_WRITE等等消息  
       优点:  
               WSAAsyncSelect和WSAEventSelect模型提供了读写数据能力的异步通知,但他们不  
       提供异步数据传送,而重叠及完成大unkou提供异步数据的传送。  
               而且它可以在系统开销不大的情况下同时处理很多连接,而select模型还需要建立  
       fd_set结构。  
               缺点:  
               必须要使用一个窗口接收消息-_-b  
               如果处理成千上万的套接字就力不从心了  
 
======    WSAEventSelect  模型  
               这个也是以时间为基础的网络事件通知,但是与WSAAsyncSelect不同的是,  
       它主要是由事件对象句柄完成的,而不是通过窗口。  
               这个就有点复杂了,一句半句说不清...-_-b  
               优点:  
                   不需要窗口  
               缺点:  
                   每次只能等待64个事件,所以处理多个套接字时有必要组织一个线程池;  
                   所以伸缩性就不如后面的完成端口了  
 
======    重叠模型  
               这个模型可以使程序能达到更加的系统性能。基本设计原理就是让应用程序  
         使用重叠的数据结构,一次投递一个或多个I/O请求。针对这些提交的请求,  
         在他们完成之后,应用程序可为他们提供服务。  
               它又分为两种实现方法:在事件中使用,还有就是完成例程,每样都不是很好学-_-b  
 
======    完成端口  
               这个是所有里面最为复杂的I/O模型,楼主最好是在理解了重叠I/O的基础之  
       上再来学习。  
               完成端口提供了最好的伸缩性,往往可以使系统达到最好的性能,是处理  
       成千上万的套接字的首选。  
               从本质上说,完成端口模型要求创建一个windows完成端口对象,该对象通  
     过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。  
 
         *  其只学这些纯理论的东西没什么意思,重要的是一定要多动手,看完一个模型  
   就亲自动手去实现一下看看,才能真正学会^_^
WinSock三种选择I/O模型 在《套接字socket及C/S通信的基本概念》和《WinSock编程基础》中,我们介绍了套接字的基本概念和WinSock API的基本调用规范。我们讨论了阻塞模式/非阻塞模式和同步I/O和异步I/O等话题。 从概念的角度,阻塞模式因其简洁易用便于快速原型化,但在应付建立连接的多个套接字或在数据的收发量不均、时间不定时却极难管理。另一方面,我们需要对非阻塞模式套接字的 WinSock API调用频 阅读详情

相关推荐

WinSock I/O 模型

1、select 模型 int select( _In_ int nfds, _Inout_ fd_set *readfds, _Inout_ fd_set *writefds, _Inout_ fd_set *exceptfds, _In_ const struct timeval *timeout ); eg:获取读集 fd_se

ssqWolf的专栏 1051

网络事件模型---重叠IO

1.基于windows窗口的网络事件通知模型   缺点:只是通知什么时候可以接收数据,什么时候可以发送数据。   没有异步发送数据,异步接收数据的能力。2.重叠IO模型    允许应用一次投递一个或多个异步I/O请求。 这与重叠ReadFile 和 WriteFile操作文件类似。   提交重叠I/O包括提交ACCEPT,提交SEND,提交RECV请求等。   其中有个参数是OVE

WhyGoSoFar的专栏 1451

WinSock I/O 模型 -- OVERLAPPED I/O 模型

简介 OVERLAPPED I/O 模型也是 WinSock 中常见的异步 I/O 模型,相比于我们之前提到的 Select 模型,WSAAsyncSelect 模型 和 WSAEventSelect 模型有更好的性能. 为了方便描述,下文我们将称 Overlapped I/O 模型为 “重叠模型”. 重叠模型的基本设计原理便是让应用程序使用一个 重叠的数据结构(Overlapped),一次投递一个或多个 Winsock I/O 请求。针对那些提交的请求,在它们完成 之后,应用程序可为它们提供服务 使用这个

Useless Programmer 的专栏 693

Windows socket之WSAEventSelect模型

WSAEventSelect模型 WSAEventSelect模型是Windowssocekts提供的另一个有用异步IO模型。该模型允许在一个或多个套接字上接收以事件为基础的网络事件通知。Windowssockets应用程序可以通过调用WSAEventSelect函数,将一个事件与网络事件集合关联起来。当网络事件发生时,应用程序以事件的形式接收网络事件通知。 WSAEventSe...

系统运维 437

DIY T12烙铁头驱动难题:用几个电容二极管,搞定NMOS上管驱动(附Multisim仿真)

本文详细介绍了如何利用电荷泵电路解决DIY T12烙铁头驱动中的NMOS上管驱动难题。通过巧妙组合电容和二极管,构建低成本高效的升压电路,实现栅极高压驱动需求。文章包含具体电路设计、元件选型建议、实际搭建注意事项以及Multisim仿真验证,为电子爱好者提供了一套完整的解决方案。

weixin_33640562的博客 334

从零开始:用LabVIEW和ModbusTCP协议,像搭积木一样连接Delta PLC

本文详细介绍了如何利用LabVIEW的图形化编程环境和ModbusTCP工业协议,快速连接Delta PLC实现数据通信。通过模块化配置和实战案例,指导读者无需编写复杂代码即可完成寄存器读取、多数据类型处理及系统监控,显著提升工业自动化项目的开发效率与部署速度。

n8m7b6v5c4的博客 697

socket编程的select模型

在掌握了socket相关的一些函数后,套接字编程还是比较简单的,日常工作中碰到很多的问题就是客户端/服务器模型中,如何让服务端在同一时间高效的处理多个客户端的连接,我们的处理办法可能会是在服务端不停的监听客户端的请求,有新的请求到达时,开辟一个新的线程去和该客户端进行后续处理,但是这样针对每一个客户端都需要去开辟一个新的线程,效率必定底下。 其实,socket编程提供了很多...

weixin_30338481的博客 494

Origin作图——等高线图

最近做一个测试数据图,开始想通过用热图来展示,结果发现热图有很多的小方块,很难呈现出最好的效果,因为数据是有一层一层的递进效果,因此经过尝试后,发现等高线图是个好选择。 热图展示效果如下:其中有很多的小方块不适合,热图制图方法前面有记录。 下面展示等高线图制作方法。首先是导入数据,可以从excal导入,也可以直接复制进去。等方法。 选中要展示的数据,绘图----等高线图 选中箭头,确定。 双击图像,点击线,我们需要把线隐藏了. 双击图像,我们需要调色板,根据自己的选择,一般用调色板的颜色。

qq_42278015的博客 1万+

winsock 模型 据我所知12000个左右,以前看到过,在哪里看的忘记了 evnet

重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数。当使用重叠I/O模型时,可以选择使用不同的完成通知方式。 采用事件对象通知的重叠I/O模型是不可伸缩的,因为针对发出WSAWaitForMultipleEvents调用的每个线程,该I/O模型一次

fysy0000的专栏 984

海思Hi3516CV610开发实战:在Ubuntu 22.04上从零构建嵌入式Linux开发环境

本文详细介绍了在Ubuntu 22.04上为海思Hi3516CV610开发板搭建嵌入式Linux开发环境的完整流程。从虚拟机配置、系统安装到基础环境设置,提供了实用技巧和常见问题解决方案,帮助开发者高效构建适用于智能视觉处理的开发环境。

weixin_29197699的博客 510

智能检查点优化:动态频率与差异化存储的断点续训实践(模型训练丨容错机制丨人工智能)

本文深入探讨了大规模模型训练中智能检查点优化的核心实践。针对传统固定频率保存导致的存储浪费与恢复缓慢问题,提出了基于损失变化率的动态频率算法与分层差异化存储策略。通过PyTorch代码示例,详细展示了如何实现动态调度与增量保存,有效降低存储成本,并确保训练中断后能快速、可靠地恢复,显著提升训练任务的容错能力与经济效益。

weixin_29072299的博客 334

浅析网络编程之Socket模型

Windows下的五种IO模型,网络编程模型介绍。本文为原转载https://blog.youkuaiyun.com/witton/article/details/7019470博文,使用Markdown对代码进行整理。

witton的专栏 339

YOLOv11改进有效涨点专栏目录 | 含卷积、主干、注意力机制、Neck、检测头、损失函数、二次创新C2PSA/C3k2等各种网络结构改进

Hello,各位读者们好.本文为最新YOLOv11有效涨点专栏目录,YOLOv11以及发布了一个月左右,这个过程中我也是给大家整理了许多的机制,其中包含了C3k2、主干(均支持根据yolov11训练的版本进行二次缩放,全系列都能轻量化)、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新。

Snu77的博客 8万+

Socket总结

转自:http://blog.youkuaiyun.com/zhu_nn/article/details/5701790   很好的总结,收藏啦。   Winsock 的I/O操作: 1、 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字 默认为阻塞模式。可以通过多线程技术进行处理。 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权

shellching的专栏 1830

【MATLAB代码】基于水声通信(ACOMMS)下的到达时间差(TDOA)定位的AUV自主导航例程,附完整代码

水下AUV导航系统仿真研究 本研究基于到达时间差(TDOA)技术实现了水下自主航行器(AUV)的三维导航仿真系统。系统采用四个声学信标作为定位基准,通过TDOA测量数据迭代求解AUV位置。仿真结果表明: 导航性能:系统能够有效跟踪AUV从起点(30,30,-20)到目标点(70,70,-20)的航行轨迹,定位误差保持在合理范围内。 误差分析:定位误差变化曲线显示系统具有稳定的定位精度,平均误差为0.5米左右。 技术特点:采用两步最小二乘迭代算法求解非线性TDOA方程,提高了定位精度和计算效率。 该仿真系统为

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 320

华为OD机试双机位C卷:字符串计数匹配 (C/C++/Py/Java/Js/Go)

华为OD机试双机位C卷 字符串计数匹配,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。 华为OD机试 字符串计数匹配, 华为OD上机考试 - 字符串计数匹配。

qq_45776114的博客 1647

WinSock的五种I/O模型

1、 两种I/O模式  阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字 默认为阻塞模式。可以通过多线程技术进行处理。  非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权。这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误。但功能强大。 为了解决这个问题,提出了进行I/O操作的一些I/O模型

人生代码,代码人生。。。 1659

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Winsock I/O 模型:性能和可扩展性的关键

Select模型是Windows Socket中最基本的一种同步I/O模型。它通过使用Select函数,开发者可以监视一组socket的状态变化,例如可读性、可写性、错误状态等。Select模型使用轮询机制,让开发者在一个线程内管理多个socket,有效减少资源的负担。然而,由于Select模型的低效轮询机制,在处理大规模并发连接时会面临性能瓶颈。

JAZJD的博客 1538

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Winsock网络编程套接字I/O模型之选择模型

Winsock 提供了一些 I/O 模型帮助应用程序以异步方式在一个或者多个套接字上管理 I/O。

weixin_43446169的博客 1316

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WinSock的I/O模型

阻塞与非阻塞阻塞是指一个线程在调用一个函数时,该函数由于某种原因不能立即完成,导致线程处于等待状态。能引起阻塞的套接字函数实际上也是I/O函数,只不过他们的操作设备是网络,因此阻塞模式下的函数也被称为网络i/o函数。阻塞模式下的函数包括:accept()——监听套接字的缓冲队列中没有已达到的连接请求,则阻塞,当有连接请求到达时恢复。connect()——连接请求发送出去便阻塞,直到TCP/IP三次握手过程成功结束,返回对客户端连接请求的确认。

qq_53830608的博客 2184

WinSock 异步I/O模型

    如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了五种I/O模型,分别是:■ 选择(select);■ 异步选择(WSAAsyncSelect);■ 事件选择(WSAEventSelect);■ 重叠I/O(Overlapped I/O);■ 完成端口(Completion Port)(+线程池技术) 。    每一种模型适用于一种特定的应用场景。大家应该针对自己应用程序的需求,综合考虑到程序的扩展性和可移植性等因素,作出自己的选择。     待

netanimals的专栏 1468

C++ Windows Socket五种I/O模型

Windows Socket五种I/O模型 Winsock 的I/O操作: 1、 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字 默认为阻塞模式。可以通过多线程技术进行处理。 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权。这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK...

qq_24127015的博客 891
上一篇: 完成端口重叠I/O模型的服务器中,存储和管理数万个socket句柄
下一篇: 模仿Windows的消息驱动机制获得了成功
Garfield
博客等级 码龄26年 24粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值