#异步模型
#异步和同步
>同步,就是在发出一个功能调用时,在没有得到结果前,调用不返回
>异步,当一个异步过程调用发出后,调用者不能立即得到调用结果,而是通过状态,通知和回调来通知调用者。
>通过检查状态来判断异步调用结果,效率会很低,因为需要周期性检查状态
>回调函数和通知差不多
#同步调用与阻塞调用
>对于同步调用来说,当前线程还是激活状态的。例如CSocket中调用Receive函数,当缓冲区没有数据时,虽然函数一直在等待而没有返回,但同时线程仍然能继续处理各种消息。
>对于阻塞调用来说,当前线程会被挂起。例如 revc函数,当socket工作在阻塞模式的时候,如果在缓冲区没有数据的情况下调用该函数,那么线程将会被挂起,直到有数据为止。
#非阻塞
非阻塞,在不能得到结果前,函数不会阻塞当前线程,而是立即返回。
>对象是否处于阻塞模式和函数是不是阻塞调用有很强的想关心,但并不是一一对应
>阻塞对象可以有非阻塞的调用方式,可以通过API轮询状态,在适当的时候调用阻塞函数,就可以避免阻塞。
>对于非阻塞对象,特殊调用也可以进入阻塞调用,例如select
>CSocket::Receive 函数(同步)
>recv (阻塞)

#Windows下的异步通信模型

由Winsock提供的异步通信模型,应用程序可以在一个套接字上接收以Windows消息为基础的网络事件通知。
WSAAsyncSelect 模式与select模式最大的区别在于,select模式需要不停检测socket,判断有无消息,而WSAAsyncSelect 会在接收到用户定义的消息后通知用户,再对Socket进行相应处理。
#WSAAsyncSelect  函数
WSAAsyncSelect (
    SOCKET s ,
    HWND hWnd , 
    Unsigned int uMsg ,
    long lEvent
)
此函数在socket建立之后调用,以打开消息通知。lEvent为网络事件的组合,有如下值
调用WSAAsyncSelect 成功之后,hWnd对应的窗口就会以Windows消息的形式接收网络事件通知。
 
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/fysola/p/4822742.html

高效通信模型之 - 异步通信模型相关推荐

  1. 消息中间件解析 | 如何正确理解软件应用系统中关于系统通信的那些事?

    苍穹之边,浩瀚之挚,眰恦之美:悟心悟性,善始善终,惟善惟道! -- 朝槿<朝槿兮年说> 写在开头 随着业务需求的发展和用户数量的激增,对于互联网应用系统或者服务应用程序则提出了新的挑战,也 ...

  2. 【挑战学习一百天冲刺实习面试】第二十二天:全面理解BIO、NIO、AIO(完结)

    一些基本概念 阻塞与非阻塞 指的是等待调用结果返回之前,调用方的状态 阻塞:发出请求等待请求结果时不能进行其他操作 非阻塞:发出请求等待请求结果时可以进行其他操作 同步与异步 指的是通信机制的区别,等 ...

  3. 【计算机网络】物理层 : 数据通信 ( 数据通信模型 | 信源 | 信宿 | 信道 | 通信方式 | 单工 | 半双工 | 全双工 | 数据传输方式 | 串行 | 并行 )

    文章目录 一.数据通信模型示例 二.数据通信模型 三.数据通信模型 分类 四.数据通信 术语 五.三种通信方式 六.数据传输方式 一.数据通信模型示例 数据通信模型 示例 : ① 通信场景 : 两台计 ...

  4. 同步请求和异步请求的区别

    同步请求和异步请求的区别 先解释一下同步和异步的概念 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式.   异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据 ...

  5. java同步异步区别_同步请求和异步请求的区别

    同步请求和异步请求的区别 先解释一下同步和异步的概念 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的 ...

  6. 网易视频云专注于技术服务——异步通知系统

    随着互联网技术的发展,云计算在资源层面竞争已经进入白热化的阶段,网易视频云定位于PAAS层面,从各个技术领域进行技术钻研以提供给用户更高效.更稳定.更便捷的视频直播技术服务:notify系统作为网易视 ...

  7. C#异步编程看这篇就够了

    随着.NET Core的流行,相信你现在的代码中或多或少的会用到async以及await吧!毕竟已成标配.那么我们为什么要用async以及await呢?其实这是微软团队为我们提供的一个语法糖,让我们不 ...

  8. 多任务场景下单线程异步多线程多进程

    多任务的场景:1.爬取不同url的内容,爬取同一个url分页内容.比如:豆瓣图书 Top 250 https://book.douban.com/top250?start=0 实现豆瓣图书Top250 ...

  9. C/C++编程:异步编程入门

    背景 在产品端开发软件多了,免不了遇到多线程处理的情况,这也符合多核.异构的现代化硬件发展的需求.多线程处理中常见的有两种应用情形: 并行化算法处理.利用OpenMP/TBB等CPU并行库,或者CUD ...

最新文章

  1. 华硕的服务器怎么看型号,怎么识别华硕主板型号
  2. python可以自学吗-没有编程基础,可以自学Python吗?
  3. Android中文API(130) —— Html
  4. gradle中的JCenter与mavenCenter的区别
  5. 【转】C#委托事件浅析
  6. 产品面试题:朋友圈内容为何不支持直接修改?
  7. iOS 核心动画 Core Animation浅谈
  8. Oracle中 char varchar varchar2的区别
  9. Linux内核源代码分析——swap实现
  10. Golang教程:结构体
  11. JBoss中间件漏洞总结
  12. java希腊字母表怎么打印_java 命令行窗口输出希腊字母表
  13. 揭秘:顶级产品经理是如何写产品需求文档(PRD)的
  14. PTA实验4-1-3 找出最小值 (20分) 本题要求编写程序,找出给定一系列整数中的最小值。
  15. 攻防世界Web新手区题解
  16. c1-02西班牙的语言,【图片】考试的同学看过来~DELE-C1两个月准备(实用经验+超详细流程)转【西班牙语吧】_百度贴吧...
  17. PostgreSQL 源码解读(31)- 查询语句#16(查询优化-表达式预处理#1)
  18. 通过 I2C 驱动 LCD1602 液晶屏(51单片机)
  19. qml tableview
  20. 探索式测试解密——无探索,不测试!

热门文章

  1. 中专考的计算机一级b有用吗,白城计算机一级B资格证真实可查么
  2. nodejs mysql 同步_NodeJS实现同步的方法
  3. 计算器的二进制功能java_Java二进制文字– Java 7功能
  4. java堆 数据结构 堆_快速堆数据结构
  5. ios8升级ios12教程_iOS SpriteKit教程
  6. java序列化与深度克隆
  7. kvm虚拟机vnc和spice配置
  8. tomcat使用线程池配置高并发连接
  9. Cocos2D中图片加-hd后缀的说明
  10. 沈志勇-百度大数据引擎与分析预测