#Socket事件
>FD_CONNECT:通常由Client端socket调用socket API函数时触发
>FD_ACCEPT:通常发生在server端的事件
>网络传输服务进程会向socket window (CSocketWnd,即消息池)发送 WM_SOCKET_NOTIFY 通知
 
网络服务进程,CSocket(WSock32.dll),Socket API(ws2_32.dll)层次关系如下:
 
 
 
#阻塞模式
 
阻塞通信模型(server),
阻塞模式下server与client端之间的通信处于同步状态下
当serer端收到FD_ACCEPT事件时,才会接触阻塞
 
#非阻塞模式
 
>在非阻塞模式下,client与server端通信处于异步状态下
>函数调用后立即返回,当网络操作传送完毕之后由WINSOCK给应用程序发送一个消息通知操作完成,此时可以根据发送的消息参数判断是操作否正常。
>与阻塞模式相比,非阻塞模式无需创建一个新线程
 
 
 
 
 
#选择I/O模式  (SELECT)
 
通过调用SELECT ,系统可以同时等待多个IO设备。当没有设备准备好时,SELECT挂起;其中任何一个设备准备好,SELECT就返回。
 
 
#异步模型
 
#异步和同步
>同步,就是在发出一个功能调用时,在没有得到结果前,调用不返回
>异步,当一个异步过程调用发出后,调用者不能立即得到调用结果,而是通过状态,通知和回调来通知调用者。
>通过检查状态来判断异步调用结果,效率会很低,因为需要周期性检查状态
>回调函数和通知差不多
 
#同步调用与阻塞调用
>对于同步调用来说,当前线程还是激活状态的。例如CSocket中调用Receive函数,当缓冲区没有数据时,虽然函数一直在等待而没有返回,但同时线程仍然能继续处理各种消息。
>对于阻塞调用来说,当前线程会被挂起。例如 revc函数,当socket工作在阻塞模式的时候,如果在缓冲区没有数据的情况下调用该函数,那么线程将会被挂起,直到有数据为止。
 
#非阻塞
非阻塞,在不能得到结果前,函数不会阻塞当前线程,而是立即返回。
>对象是否处于阻塞模式和函数是不是阻塞调用有很强的想关心,但并不是一一对应
>阻塞对象可以有非阻塞的调用方式,可以通过API轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。
>对于非阻塞对象,特殊调用也可以进入阻塞调用,例如select
>CSocket::Receive 函数(同步)
>recv (阻塞)
 
 
 
 
 
 
 
 
 
 
 
 
 
 

高效通信模型之 - 网络通信I/O模式( Windows)的更多相关文章

  1. 如何快速高效简洁的打开软件 干净利索的windows快捷程序启动器

    本文的主题是如何高效快捷的打开你想要打开的软件 本文介绍的应该是最简洁的一种方式,借助于windows内部的path进行设置 也可以认为是一种形式的windows应用启动器程序---win+R快速打开 ...

  2. 两种高效的事件处理模型:Reactor模式和Proactor模式

    随着IO多路复用技术的出现,出现了很多事件处理模式.同步I/O模型通常由Reactor模式实现,而异步I/O模型则由Proactor模式实现. Reactor模式: Reator类图如上所示,Reac ...

  3. WPF Multi-Touch 开发:高效开发模式

    原文 WPF Multi-Touch 开发:高效开发模式 在前几篇文章中已经介绍了触屏操作的多种模式,并对其开发方式也有了进一步了解.细心的朋友应该会发现在上一篇文章中,如果拖动图片过快它会因惯性效果 ...

  4. Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?

    [梁海的回答(99票)]: 简答.一些细节暂无精力查证,如果说错了还请指出. 一句话建议:涉及兼容性考量时,不要用记事本,用专业的文本编辑器保存为不带 BOM 的UTF-8. * * * 如果是为了跨 ...

  5. tony_LVS DR模式 RealServer 为 Windows客户端配置

    LVS   DR模式  Windows 2000,Windows2003客户端配置   控制面板-添加硬件-选“是,我已经连接了此设备”点击下一步-在列表中选择添加新的硬件设备-选“安   装我充从手 ...

  6. RTSP Windows专用播放器EasyPlayer : 稳定、兼容、高效、超低延时

    EasyPlayer RTSP Windows专用播放器 EasyPlayer RTSP Windows 播放器是由EasyDarwin团队开发和维护的一个完善的RTSP流媒体播放器项目,视频编码支持 ...

  7. XP之后Windows的一些变化

    看到很多Windows开发人员,尤其是C++程序员思维还是停留在XP操作系统,当然根据工作是否需要新知识 ,这本身没有错.但是实际上Vista之后的Win7, 再之后的Win8 ,Windows已经发 ...

  8. 高性能 Windows Socket 组件 HP-Socket v3.0.2 正式发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  9. 高性能 Windows Socket 组件 HP-Socket v3.0.1 正式发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

随机推荐

  1. PostgreSQL数据库中跨库访问解决方案

    PostgreSQL跨库访问有3种方法:Schema,dblink,postgres_fdw. 方法A:在PG上建立不同SCHEMA,将数据和存储过程分别放到不同的schema上,经过权限管理后进行访 ...

  2. 转:python webdriver API 之alert/confirm/prompt 处理

    webdriver 中处理 JavaScript 所生成的 alert.confirm 以及 prompt 是很简单的.具体思路是使用switch_to.alert()方法定位到 alert/conf ...

  3. JSon_零基础_008_将JSon格式的"数组"字符串转换为List集合

    将JSon格式的"数组"字符串转换为List集合. 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“name.values”集合, ...

  4. JSon_零基础_002_将List类型数组转换为JSon格式的对象字符串,返回给界面

    将List类型数组转换为JSon格式的对象字符串,返回给界面 所需要导入的包: 编写bean: package com.west.webcourse.po; /** * 第01步:编写bean类, * ...

  5. MySQL 请选择合适的列! 转载(http://www.cnblogs.com/baochuan/archive/2012/05/23/2513224.html)

    点击图片,可查看大图.    介绍   情况:如果你的表结构设计不良或你的索引设计不佳,那么请你优化你的表结构设计和给予合适的索引,这样你的查询性能就能提高几个数量级.——数据越大,索引的价值越能体现 ...

  6. spark使用Hive表操作

    spark Hive表操作 之前很长一段时间是通过hiveServer操作Hive表的,一旦hiveServer宕掉就无法进行操作. 比如说一个修改表分区的操作 一.使用HiveServer的方式 v ...

  7. paper 45:latex的使用

    本教程面向对LaTeX完全无认知无基础的新人. 旨在让新人能够用最简单快捷的方式,轻松入门,能够迅速使用LaTeX完成基本的文本编辑. 尤其旨在破除部分新人对LaTeX在传闻中难以学习的恐惧感. 在入 ...

  8. 手机端 zepto tap事件穿透

    什么是事件穿透? 点击上面的一层时会触发下面一层的事件 ”google”说原因是“tap事件实际上是在冒泡到body上时才触发”,也就是Zepto的tap事件是绑定在document上的,所以会导致 ...

  9. oracle的簇的创建

    簇其实就是一组表,由一组共享相同数据块的多个表组成,将经常一起使用的表组合在一起成簇可以提高处理效率:在一个簇中的表就叫做簇表. 建立顺序是:簇→簇表→簇索引→数据 创建簇的格式 CREATE CLU ...

  10. 解析xml文件

    package com.ss1.xml; import java.io.File; import java.io.FileOutputStream; import java.io.IOExceptio ...