美文网首页
同步和异步、阻塞和非阻塞的区别

同步和异步、阻塞和非阻塞的区别

作者: Uchiha_Ponny | 来源:发表于2017-03-28 23:08 被阅读0次

最近研究Nginx的时候知道了Nginx工作进程是异步非阻塞的方式,就对同步和异步、阻塞和非阻塞的区别产生了困惑,最后在segmentfault上看到了一篇简洁明了的解释很好。

转载自:https://segmentfault.com/a/1190000004240246

同步和异步,阻塞和非阻塞,这两组概念出现在IO操作中常常让人混淆不清。这里根据自己看到的,想到的,整理下自己的理解,权当交流。

IO操作其实可以分成两个步骤,请求IO操作和执行IO操作。一般的IO调用过程是这样的:发起IO操作的请求,执行IO操作,得到IO操作的结果,将结果返回给IO操作请求。

同步和异步
同步和异步是一种通信机制,涉及到调用方和被调用方,关注的是IO操作的执行过程及结果的返回方式,不同点在于双方在这两个方面的行为方式。
如果调用方需要保持等待直到IO操作完成进而通过返回获得结果,则是同步的;如果调用方在IO操作的执行过程中不需要保持等待,而是在操作完成后被动的接受(通过消息或回调)被调用方推送的结果,则是异步的。
同步和异步,适合描述执行IO操作的情境。

阻塞和非阻塞
阻塞和非阻塞是一种调用机制,只涉及到调用方,关注的是IO操作的执行状态,不同点在于请求IO操作后,针对IO操作的状态,调用方的行为方式。
如果调用方等待IO操作完成后返回,则是阻塞的;如果调用方不需要等待IO操作完成就立即返回,则是非阻塞的,非阻塞的情况下,常常需要多次调用去check,才能获得IO操作的结果。
阻塞和非阻塞,适合描述发起IO操作请求的情境。

阻塞与非阻塞,和同步异步无关,可以阻塞等待同步执行过程完成,也可以阻塞等待异步执行过程完成。根据以上理解,同步和异步,阻塞和非阻塞,是可以互相组合的。

同步阻塞
调用者发起IO操作请求,等待IO操作完成再返回。IO操作的过程需要等待,操作执行完成后返回结果。

同步非阻塞
调用者发起IO操作请求,询问IO操作的状态,如果未完成,则立即返回;如果完成,则返回结果。IO操作的过程需要等待执行完成才返回结果。

异步阻塞
调用者发起IO操作请求,等待IO操作完成再返回。IO操作的过程不需要等待,操作完成后通过通知或回调获得结果。

异步非阻塞
调用者发起IO操作请求,询问IO操作的状态,如果未完成,则立即返回;如果完成,则返回结果。IO操作的过程不需要等待,操作完成后通过通知或回调获得结果。

相关文章

  • 同步阻塞IO,同步非阻塞IO,异步阻塞IO,异步非阻塞IO

    同步,异步 和 阻塞,非阻塞之间的区别? 同步,异步,是描述被调用方的。阻塞,非阻塞,是描述调用方的。 同步不一定...

  • UNIX 的5种IO模型介绍

    IO模型同步、异步、阻塞、非阻塞socket阻塞与非阻塞,同步与异步 同步和异步 同步/异步主要针对C端-同步就像...

  • IO模型

    同步,异步,阻塞和非阻塞的概念与区别 同步和异步从消息通知机制角度来说的。 两个任务 同步一直等,异步不等 阻塞和...

  • 谈论:同步异步阻塞非阻塞.md

    同步/异步:关注的方式(是否主动) 阻塞/非阻塞: 同步阻塞BIO: 同步非阻塞NIO: 异步非阻塞: 异步阻塞:

  • 异步化介绍

    1.异步化介绍 1.1 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞, 这个几个词已经是老生常谈,但是常常还...

  • 同步和异步、阻塞和非阻塞的区别

    最近研究Nginx的时候知道了Nginx工作进程是异步非阻塞的方式,就对同步和异步、阻塞和非阻塞的区别产生了困惑,...

  • Java IO

    Before IO 分为:同步、异步阻塞、非阻塞 同步和异步是目的,阻塞和非阻塞是实现方式。 一个IO操作其实分成...

  • 高并发的“大杀器”:异步化、并行化

    高并发的大杀器:异步化 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞,这几个词已经是老生常谈,但是还是有很多...

  • 高并发的“大杀器”:异步化、并行化

    高并发的大杀器:异步化 同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞,这几个词已经是老生常谈,但是还是有很多...

  • 异步化,高并发大杀器

    聊聊如何让项目异步化的一些事。 1.同步和异步,阻塞和非阻塞 同步和异步,阻塞和非阻塞, 这个几个词已经是老生常谈...

网友评论

      本文标题:同步和异步、阻塞和非阻塞的区别

      本文链接:https://www.haomeiwen.com/subject/ygbsottx.html