一、硬件层次上的同步与异步
1.异步通信
   在异步通信中,CPU与外设之间有两项约定:
   (1)字符格式---字符的编码形式及规定,每个串行字符由以下四个部分组成:
      ⑴ 1个起始位,低电平;
      ⑵ 5--8个数据位;
      ⑶ 1个奇偶校验位;
      ⑷ 1--2个终止位(停止位)高电平; 
   (2)波特率
      波特率是指单位时间内传送二进制数据的位数,以位/秒位单位,它是衡量串行数据
    传送速度快慢的重要标志和参数。
    例如:假如数据出送速率是120位/秒,则传送的波特率为:120波特。
    注意:异步通信的传送速度一般在50波特-----19200波特之间。

2.同步通信
   在异步通信中,每个字符要用起始位和终止位作为字符开始和结束的标志,占用了一些时间,为了提高数据块的传送速度,就要设法去掉这些标志,就采用同步通信。
   同步通信的速度可达500千波特。但是它的硬件电路比较复杂。

3.优缺点比较
1)异步通信简单,双方时钟可允许一定误差。同步通信较复杂,双方时钟的允许误差较小。
2)通信效率:异步通信低,同步通信高。
3)同步通信取消了每个字节的同步位,从而使数据位在传送为中所占比率增大,提高了传送效率。
4)同步通信容许用户传送没有意义的二进制数据,即在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。

二、软件层次的同步与异步
1.同步通信:
一般使用单线程,读操作和写操作都在同一个线程里面,读操作时不会写,写操作时不会读,此时硬件处于半双工模式。

2.异步通信
一般使用多线程,读操作和写操作在不同的线程里面,读操作和写操作同时进行,当读或写完成时使用事件通知,此时硬件处于全双工模式。
用异步方式操作串口必须要定义 OVERLAPPED 结构,其中的 hEvent 必须自己建立,要定义两个 OVERLAPPED 结构,一个用于读一个用于写,当然也必须建立两个 Event,把它们放入 OVERLAPPED.hEvent。
一般我们是在主线程中写数据,因为写是我们可以控制的,而读的时候我们不知道数据什么时候会到,所以要建立一个线程专门用来读数据,在这个线程中,我们循环地用 ReadFile 读串口,同时用 WaitCommEvent 检测线路状态。

三、软件层次的阻塞和非阻塞模式
1.阻塞模式:
    阻塞模式执行I/O操作完成前会一直进行等待,不会将控制权交给程序,一般可以设置一个超时结构,超时时间到则返回超时,可以通过多线程技术进行处理。

2.非阻塞模式
    非阻塞模式执行I/O操作后会立即返回,而不管读写有没有成功,一般在进行I/O操作前可以通过一些异步模型(如socket通信里面的select模型)来查询通信口的当前状态是否可读或可写。

转载于:https://www.cnblogs.com/highmayor/archive/2008/04/23/1167739.html

同步通信与异步通信以及阻塞和非阻塞之我见 [原]相关推荐

  1. 【NIO】阻塞与非阻塞

    "阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答. 1.同步与异步 同步和异 ...

  2. 理解同步异步、阻塞与非阻塞

    "阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答. 1.同步与异步 同步和异 ...

  3. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  4. Linux IO - 同步,异步,阻塞,非阻塞

    From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...

  5. 同步VS异步,阻塞VS非阻塞

    同步VS异步 同步和异步关注的是消息通信机制(Synchronous / Asynchronous Communication) 同步:发出一个"调用"时,在没有得到结果返回前,该 ...

  6. IO中同步、异步与阻塞、非阻塞的区别

    一.同步与异步 同步/异步, 它们是消息的通知机制 1. 概念解释 A. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例 ...

  7. IO复用模型同步,异步,阻塞,非阻塞及实例详解

    IO模型介绍 常用的5种IO模型:blocking IOnonblocking IOIO multiplexingsignal driven IOasynchronous IO 再说一下IO发生时涉及 ...

  8. 同步与异步,阻塞与非阻塞的区别

    1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...

  9. 创业笔记-Node.js入门之阻塞与非阻塞

    阻塞与非阻塞 正如此前所提到的,当在请求处理程序中包括非阻塞操作时就会出问题.但是,在说这之前,我们先来看看什么是阻塞操作. 我不想去解释"阻塞"和"非阻塞"的 ...

最新文章

  1. 完美解决:python报错:‘utf-8‘ codec can‘t decode byte 0xa1 in position 56: invalid start byte
  2. 【Android 组件化】路由组件 ( 使用 JavaPoet 生成路由表类 )
  3. 【软件工程】5.8 黑盒白盒测试
  4. 一、MySQL数据库基础
  5. Mybatis中的一级缓存
  6. 学习Java笔记(一)
  7. Maven的学习资料收集--(九) 构建SSH项目以及专栏maven
  8. 网易数据运河系统NDC设计与应用
  9. jupyter配置到服务器_服务器端jupyter notebook映射到本地浏览器的操作
  10. JavaScript进阶部分笔记
  11. eclipse插件之——PropertiesEditor
  12. 现在最流行哪款有linux系统,哪一个Linux发行版最流行?
  13. [李景山php]每天TP5-20161205|Loader.php-3
  14. 蓝牙打印 设置打印样式_双编辑模式 打印自由更轻松!——海鸟贴纸打印机蓝牙按键版体验...
  15. 17万字 | 2021密码应用技术白皮书(附下载)
  16. Endnote x7 和X8的下载
  17. 【计算机网络自顶向下方法】(哈工大)学习笔记
  18. ADF中在jspx页面加载的阶段添加自己的代码
  19. tkinter中控件menu的两种组织方法
  20. 如何用数据库可视化工具:DataGrip导入数据

热门文章

  1. spring-boot 中实现标准 redis 分布式锁
  2. Java基础--内部类及匿名内部类
  3. 合肥学院计算机原理,合肥学院计算机组成原理实验三-20210415130709.docx-原创力文档...
  4. 微型计算机的层次结构,计算机系统层次结构微程序级
  5. c 最大子序列和_最大子序列和暴力法、分治+递归法、妙法
  6. PowerDesigner的下载及安装
  7. 【通俗理解】锁存器,触发器,寄存器和缓冲器的区别
  8. 【异或交换原理】按位进行异或操作,实现数的交换
  9. 算法练习day19——190410(数组中重复的数字、替换空格、从尾到头打印链表)
  10. 理解CPU/寄存器/内存三者关系