同步 VS 异步

同步 VS 异步

    今天读到一篇关于同步和异步的文章,觉得写的特别好,彻底加深了我对它们的理解。文中说得很对,同步和异步实际上描述的是不通事件之间发生的顺序,同步指前后两个时间发生有一定的时间顺序,异步是指两个(或多个)事件是相互独立的,它们的发生没有时间顺序(这一点类似于概率论的独立事件)。
     接下来,我们可以举几个生活中的例子加深对它们的理解。比如说乘建房子,首先得先打地基,然后再开始砌房子,房子砌好之后再装修。这三步之间有一个严格的先后次序,你不能说先砌房子再打地基。因此,我们说上述三个步骤之间是同步关系。又比如说去理发店剪头发,通常分为两个步骤,洗头发和剪头发,但是它们之间具体哪个先发生不确定,完全取决于理发师的习惯,有的理发师可能会先剪后洗,有的可能会先洗后剪。因此,我们说剪头发和洗头发之间是一个异步关系。它们之间有一个明显的区别,异步事件都要完整的保证自己运行所需要的状态信息,而同步事件中,下一个事件可能可以从上一个事件中获得。依旧说说上面两个例子,剪头发和洗头发的两个可能是不同的人,因此两个师傅需要分别保存所需要的相关信息,例如剪头发的师傅需要知道顾客想剪一个什么样子的发型,而洗头发的师傅需要知道顾客想用什么牌子的洗发水。而在地基打好之后,砌房子的功能就知道现在要砌的房子的占地面积了,也知道从哪里开始。
     在计算机中,进程之间的关系异步的,不同的进程按各自独立的、不可预知的速度向前推进。这样做的原因主要是为了提高程序运行的效率和相应速度。在计算机中,一个进程通常需要CPU来执行计算操作,也需要存储设备来执行IO操作,但是它们对CPU和存储设备需求的顺序可能是不一致的。比如A进程需要先从存储设备中读取一些数据,然后再计算,B进程需要先计算,再将计算结果写如存储设备。如果我们采用同步的方式,那么如果A进程先取得存储设备的访问 权限,那么B进程就只能等着,知道A进程使用完CPU之后,B进程才开始执行,先取得CPU的使用权限,在将计算结果写入存储设备。如果采用的是异步的方式,那么在A进程访问存储设备时,B进程是可以取得CPU的使用权限开始执行的,而当A进程使用完存储设备需要CPU时,B进程可能正好使用完CPU,需要使用存储设备,这样就刚好交换一下。比较两种方式,显然是异步的方式效率较同步高。
     当然,进程之间除了异步关系,还有可能是同步关系,比如,进程A的输出是进程B的输入,这样就必须要求A在B的前面执行完,否则得到的结果就是不正确的。因此,又引入了进程同步的概念,不同的进程之间可能存在某种制约关系。通常情况下,在多道程序环境下,进程之间可能存在间接制约关系和直接制约关系。在一个系统中的进程,它们通常共享这某种系统资源,如CPU、IO设备等。例如,有两个进程A和B,如果A进程提出打印请求时,系统将唯一的一台打印机分配给了B进程,则此时进程A只能阻塞,一旦B进程将打印机释放,则A进程才能有阻塞状态改为就绪状态,接下来开始执行。这种执行制约关系被称为间接制约关系。而直接制约关系主要源于进程之间的合作,比如前文中提到的A进程的输出是B进程的输入,它们之间的关系就是直接制约关系。
     除了进程有同步和异步的概念外,过程调用(或函数调用)也有同步和异步的概念。同步的调用方式是一种阻塞的方式,即调用者发出调用请求之后,一直阻塞到被调用者返回结果为止。相反,异步调用方式是非阻塞的方式,即调用者发出调用请求之后立即返回,不需要等到被调用者返回结果。仔细思考一下,这里说的同步异步(或阻塞非阻塞)和前文中的概念类似,实际描述的是调用者和被调者之间的关系。

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值