zoukankan      html  css  js  c++  java
  • 网络编程中的同步与异步

          网络编程中有三对关键的词,单线程与多线程、阻塞与非阻塞、同步与异步,同步与异步一直是比较疑惑的地方。
    以前认为,同步就是阻塞socket,异步就是非阻塞socket,现在发现这样理解很片面的,其实好多地方有同步异步的概念。

    数字电路中的同步与异步是针对时钟来说的

    同步时序逻辑电路:各触发器有相同的时钟脉冲,时钟脉冲到来时所有触发器状态同时改变
    异步时序逻辑电路:没有统一的时钟脉冲,所有触发器的状态转换不一定发生在同一时刻,某些触发器的状态转换有可能会延迟。

    在通信原理中也有同步与异步的概念

    同步传输:发送方与接收方以相同的速率进行收发,不需要对每个字符进行开始和停止的操作
    异步传输:每次异步传输的信息都以一个起始位开头,在传输结束时,一个停止位表示该次传输信息的终止。

    在生活中也有同步与异步的例子

    厨房里做大饼的大厨把大饼抛给做销售的大婶,他可以以两种方式来抛

    同步抛大饼:大叔头都不抬,以一定的频率抛,大婶也没抬头,以相同的频率接。
    异步抛大饼:大叔对大婶说,要抛了,大婶做好准备,大叔才抛出大饼。

    可以看到,同步是以相同的频率来达成协作,异步是以通知的方法来达成协作。

    在网络编程中

    阻塞与非阻塞只是针对线程而言,在等待IO的时候是挂起还是继续做别的事情。同步与异步是指IO设备与CPU的协作方式,而不是发送方与接收方的协作方式,由于CPU的运算速度很快,跟IO设备不是一个数量级的,因此同步socket就会使线程一直等待(当然CPU不会忙等,这关系到线程同步问题)。异步socket会以通知的方式与CPU进行协作,当IO事件到来时线程会收到通知,异步体现在这里,而不是非阻塞socket。

  • 相关阅读:
    <译>Spark Sreaming 编程指南
    <译>Zookeeper官方文档
    <译>Flink官方文档-Flink概述
    <译>流计算容错
    <译>Flink编程指南
    <续>调度算法补充
    storm源码阅读笔记之任务调度算法
    海量数据处理方法归类
    storm中worker、executor、task之间的关系
    javax.swing.jFrame
  • 原文地址:https://www.cnblogs.com/panyihua/p/3930523.html
Copyright © 2011-2022 走看看