`

IO的阻塞与非阻塞、同步与异步

 
阅读更多

同步与异步、阻塞与非阻塞的概念都是在IO的场合下。

IO操作中涉及的2个主要对象为程序进程、系统内核。以读操作为例,当一个IO读操作发生时,通常经历两个步骤:

  1,等待数据准备

  2,将数据从系统内核拷贝到操作进程中

  例如,在socket上的读操作,步骤1会等到网络数据包到达,到达后会拷贝到系统内核的缓冲区;步骤2会将数据包从内核缓冲区拷贝到程序进程的缓冲区中。

 

同步

      就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用。当前线程一直处于运行状态。

      想象一个同步模式的场景:

      A 小明来找小刚借书:“小刚啊,你那本XXX借我看看”。 于是小刚就去找书,小明就等着看着小刚找书,如果小刚找到了,小明就拿到了书;如果小刚一直没找到,小明就一直等待着。


异步

      异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。
      B 一天小明来找小刚借书:“小刚啊,你那本XXX借我看看”,说完小明就去打球。而小刚记得了“借书给小明”的事,如果小刚记起该事,就去找书,找到就交给小明;如果小明忘记该事,小刚拿不到该书。


阻塞

       阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有在得到结果之后才会返回。如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。

       想象一个阻塞模式的场景:

       C 一天小明来找小刚借书:“小刚啊,你那本XXX借我看看”。 于是小刚就去找书,小明就等着小刚找到的消息,如果小刚找到了,告诉小明“书找到了”。小明回过神来,开心得拿到书;如果小刚还是没找到了,小明继续等待,一直找到为止。


非阻塞

       和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

       想象一个非阻塞模式的场景:

       D 一天小明来找小刚借书:“嘿小刚,你那本XXX借我看看”。 小刚说:“我得找一会”,小明就去打球去了。如果小刚找到了,立刻通知小明“书找到了”,小明放下打球,立刻回去把书拿回来。如果小刚没找到了,也通知小明“书没找到了”,小明也放下打球,去处理下一步。

 

分享到:
评论

相关推荐

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

    本文主要讲了IO中同步、异步与阻塞、非阻塞的区别。希望对你的学习有所帮助。

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO.pdf

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non...

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

    讲述同步、异步、阻塞、非阻塞的区别,通俗易懂,是我见到的最口语话最清晰的材料,文中比喻恰当,深入浅出。

    同步与异步--阻塞与非阻塞型IO

    这篇文章里,简单而且形象的介绍了同步于异步——阻塞与非阻塞的知识。希望可以帮助大家

    JAVA IO同步,异步

    介绍了基于系统底层通信技术socket,JAVA IO同步,异步,阻塞,非阻塞;

    同步与异步IO、阻塞与非阻塞IO

    很多时候我们常常看到同步与异步,阻塞与非阻塞的...异步与非阻塞画上了等号。事实上这是不对的。同步不等于阻塞,而异步也不等于非阻塞。下面就来仔细的看看同步与异步、阻塞与非阻塞的概念差别,及他们的组合应用.

    详解socket阻塞与非阻塞,同步与异步、I/O模型

    socket阻塞与非阻塞,同步与异步 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就是在c端发出一个...

    2-Socket阻塞与非阻塞,同步与异步、IO模型-120412发布1

    1. 同步,就是我客户端(c端调用者)调用一个功能,该功能没有结束前,我(c端调用者)死等结果 2. 异步,就是我(c端调用者)调用一个功能,不需要知道该功能结

    同步异步阻塞非阻塞I/O思维导图

    同步异步,阻塞非阻塞,I/O学习总结的思维导图,需要结合Richard Stevens的书来学习

    11.异步IO1

    第十一章 异步 IO这里要说的异步 IO 准确的说应该叫“信号驱动的异步 I/O”,也可以成为异步通知。前面两章说的阻塞和非阻塞 IO,他们都是同步 IO,需要

    Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    本篇文字是关于IO多路复用的更深入一步的总结,上一篇Python之进程+线程+协程(事件驱动模型、IO多路复用、select与epoll)对IO多路复用进行了概念性的分析,本篇则是对阻塞IO、非阻塞IO、与异步进行通俗性的比较和...

    高性能IO模型浅析

    (2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。 (3)IO多路复用(IO Multiplexing):即经典的Reactor...

    C++ boost::asio编程-同步TCP详解及实例代码

    boost.asio库是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型。 boost.asio库支持TCP、UDP、ICMP通信协议。 下面介绍同步TCP模式: 大家好!我是同步方式! 我的主要特点...

    Icicle具有协同程序非阻塞IO和多线程的异步库

    Icicle - 具有协同程序,非阻塞I / O和多线程的异步库,一个PHP库,用于使用同步编码技术来编写异步代码

    9.阻塞IO1

    9.1 阻塞和非阻塞、同步和异步与 IO 操作 9.2 阻塞 IO 9.2.1 等待队列 9.3 实验 9.3.1 原理图 9.3.2 设备树 9.3.3 驱动

    异步HttpClient

    主要解决生产环境中同步httpclient造成的IO阻塞问题。同步http请求将导致 tomcat 的业务线程被阻塞。一旦某接口网络出现问题,可能会阻塞tomcat业务线程,从而无法处理正常业务。很多公司使用另开线程池的方式进行...

    浅谈Node 异步IO和事件循环

    查阅资料的时候, 发现很多人都对 异步和非阻塞 的概念有点混淆, 其实两者是完全不同的, 同步异步指的是 行为即两者之间的关系 , 而阻塞非阻塞指的是 状态即某一方 。 以前端请求为一个例子,下面的代码很多人都...

    linux io 模型

    linux io模型,区分阻塞非阻塞同步异步的概念,从底层理解io。

    使用协同路由的同步异步_Synchronous asynchrony using coroutines_C+

    小型但高效的库,用于以同步方式执行异步操作(“async”->“Synca”)。该方法大大简化了有效IO和CPU密集型应用程序或其他非平凡并发算法的编写。该库演示了如何使用协同例程来实现所描述的简化。...非阻塞异步通道。

Global site tag (gtag.js) - Google Analytics