Clean Blog

海阔凭鱼跃,天高任鸟飞

同步&异步,堵塞&非堵塞 归纳总结

今天再学习进程通信基础知识的时候,对同步&异步堵塞&非堵塞 有了点清晰认知,这里列个概念和知识点:

同步和异步、堵塞和非堵塞

  • 同步和异步

    同步和异步关注的是:消息通信机制

    同步是发出这个调用后,没有得到结果就不返回,会一直等待下去,直到收到返回信息才继续执行下去。
    异步是发出一个调用后,直接返回,也就是说异步调用并不会立刻得到结果,想要得到结果,必须等待,但是它选择不在那傻等着等待结果,而去干其他事情,等待被调用者通过状态等信息来通知调用者这句话是关键),已经有结果了,可以拿走了。

举例:

  1. 同步
    你打电话给姥姥,让姥姥给你找下手机是不是丢家里了,姥姥答应好的,别挂电话,就去房间里找了(中间过了XX分钟),你拿着电话再一边等待这,这期间你啥也没干,就守着电话了,等着姥姥给你回复结果。
  2. 异步
    你打电话给姥姥,让姥姥给你找下手机是不是丢家里了,姥姥答应好的,找到告诉你,然后直接结束通话(不返回结果)。这期间,你可以干其他的事情,等待姥姥给你回复。(被调用者通过状态等信息来通知调用者)
  • 堵塞和非堵塞

    堵塞和非堵塞关注的是:进程在等待调用结果(消息,返回值)时的状态, 进程到底有没有继续往下执行

    阻塞调用:是指调用结果返回之前,当前线程会被挂起。一直处于等待消息通知,不能够执行其他业务,调用线程只有在得到结果之后才会返回。

    非阻塞调用:指在不能立刻得到结果之前,该调用不会阻塞当前线程,而会立刻返回

举例:

  1. 同步阻塞
    你打电话给姥姥,让姥姥给你找下手机是不是丢家里了,姥姥拿起电话听你说完就去找了,没有说话,你什么也不知道,在得到任何结果之前,你一直拿着电话干等(阻塞),你此时什么也干不了。

    你一直拿着电话等结果,这是阻塞。
    姥拿起电话听你说完就去找了,没有说话,你什么也不知道, 这是处于同步状态。

  2. 同步非阻塞
    你打电话给姥姥,让姥姥给你找下手机是不是丢家里了,姥姥拿起电话听你说完,说"我去帮你找找"(第一次同步结束)挂断电话,便去寻找了。过了一会,你主动电话过去问找到了没,姥姥说"还没有"(第二次同步结束)挂断电话了。再过了5分钟,姥姥找到了手机,但是没有去联系你,你再次打电话去的时候,姥姥说"手机找到了"(第三次同步结束).

    每次电话你都要得得到结果(去找->还没有找到->有找到)后你才挂断电话,这是同步。你每隔x分钟打电话询问结果,这是非阻塞。

  3. 异步阻塞
    你打电话给姥姥,让姥姥给你找下手机是不是丢家里了,姥姥说找到了通知你,挂了电话。等电话通知期间,你啥也没干,然后姥姥主动电话通知过来,找到手机了。

    姥姥主动打电话通知我,这是异步。 等待电话期间我啥也没干,这是堵塞

  4. 异步非阻塞
    你打电话给姥姥,让姥姥给你找下手机是不是丢家里了,姥姥说找到了通知你,挂了电话。等电话通知期间,你又是跑步又是看书,然后姥姥主动电话通知过来,找到手机了。

    姥姥主动打电话通知我,这是异步。 等电话通知期间,你又是跑步又是看书,这是非堵塞


参考:【进程间通信基础知识】https://www.cnblogs.com/sylz/p/6023445.html