`

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

 
阅读更多

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

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

  1,等待数据准备

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

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

 

同步

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

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

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


异步

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


阻塞

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

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

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


非阻塞

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

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

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

 

分享到:
评论

相关推荐

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

    在软件开发领域,尤其是在涉及输入输出(IO)操作时,理解同步与异步、阻塞与非阻塞的概念是非常重要的。这些概念对于设计和实现高效的程序至关重要,尤其是在高并发和分布式系统中。 一、同步与异步 同步和异步是...

    同步异步阻塞非阻塞

    同步异步阻塞非阻塞 IO 模型 在 Linux 环境下的网络 IO 中,有五种基本的 IO 模型:阻塞 IO、非阻塞 IO、IO 多路复用、信号驱动 IO 和异步 IO。其中,信号驱动 IO 不常用,因此主要介绍其余四种 IO 模型。 1. 阻塞...

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

    这里我们将深入探讨同步IO、异步IO、阻塞IO和非阻塞IO的概念,理解它们的工作原理以及在实际应用中的差异。 1. 同步IO与异步IO: - **同步IO**:在同步模式下,应用程序执行I/O操作时会等待操作完成。这意味着程序...

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

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

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

    Socket编程中的阻塞与非阻塞、同步与异步是两个独立的概念,它们涉及的是不同层面的操作机制。这里我们将详细探讨这两个概念以及I/O模型。 首先,同步与异步是客户端(C端)调用服务端(S端)时的行为模式。同步...

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

    理解同步/异步与阻塞/非阻塞的区别后,我们可以进一步探讨这两种机制的组合应用。 1. **同步阻塞**:最常见的组合之一,适用于简单且对实时性要求不高的应用场景。例如,使用阻塞式的方法读取文件或数据库查询。 2...

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

    ### 同步与异步——阻塞与非阻塞型IO详解 #### 一、引言 在计算机科学中,I/O(输入/输出)操作是任何程序与外部世界交互的基础。根据I/O操作的不同特性,可以将其分为四大类:同步阻塞IO、同步非阻塞IO、异步阻塞...

    JAVA IO同步,异步

    在本文中,我们将讨论基于系统底层通信技术Socket 的JAVA IO同步和异步操作,包括阻塞(Blocking)和非阻塞(Non-Blocking)IO 操作。 同步(Synchronous)IO 同步IO 是指应用程序在执行IO 操作时,需要等待IO ...

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

    同步与异步决定了客户端等待服务器响应的方式,而阻塞与非阻塞则决定了服务器处理I/O操作的策略。选择正确的组合可以显著提高系统的并发性和响应能力,从而提升用户体验。在设计网络应用程序时,需要根据具体需求...

    Java IO模型详解:同步阻塞、非阻塞及异步IO的应用与优化

    内容概要:本文详细介绍了Java IO模型的基本概念及其分类,重点讲解了同步阻塞IO (BIO)、非阻塞IO (NIO) 和异步IO (AIO) 的特点和应用场景。首先解释了什么是I/O以及它在计算机结构中的角色,接着探讨了应用程序视角...

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

    同步与异步、阻塞与非阻塞是计算机科学中关于I/O操作的两种关键概念,它们描述的是程序处理输入/输出(IO)时的不同方式。 同步与异步主要涉及的是程序等待IO操作完成的方式。同步IO指的是在发出IO请求后,程序会...

    简述JAVA同步、异步、阻塞和非阻塞之间的区别

    在IO操作中,我们可以将同步、异步、阻塞和非阻塞四种模式组合起来,形成四种不同的IO模式:同步阻塞IO、异步阻塞IO、同步非阻塞IO和异步非阻塞IO。同步阻塞IO是指Sender在发送请求后,等待Receiver的响应,直到...

    java 中同步、异步、阻塞和非阻塞区别详解

    异步与同步相对,它允许调用者在等待结果返回时继续执行其他任务。在Java中,通常通过回调、事件驱动或者Future/Await模型实现异步处理。异步处理可以提高程序响应速度,因为它避免了线程的阻塞等待,但同时也增加了...

    同步、异步IO

    在Java中,可以查看NIO相关的类,如java.nio.channels.Selector、java.nio.channels.SocketChannel等,研究它们如何实现非阻塞IO。在Node.js中,可以研究libuv库,它是Node.js实现异步IO的基石,提供了对多种平台的...

    linux异步IO.pdf

    4. **异步非阻塞I/O(AIO)**:真正实现了I/O操作的异步化。请求发起后立即返回,允许应用程序继续执行其他任务,而I/O操作在后台完成。完成时,通过信号或回调机制通知应用程序,实现了计算和I/O操作的无缝重叠,...

    IO模型中的阻塞模型和非阻塞模型

    - **非阻塞同步IO**:例如在某些系统中,可以设置套接字为非阻塞模式,此时即便没有数据可用也会立即返回一个特定值(如-1),而不是阻塞当前线程。 - **异步IO**:在异步IO中,进程或线程发起IO操作后可以立即...

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

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

    WinSock 异步IO模型

    1. **非阻塞**:程序在等待IO操作完成时不会被挂起,可以继续处理其他任务。 2. **高并发**:多个并发的IO请求可以在同一时刻处理,提高系统吞吐量。 3. **反应灵敏**:用户界面可以保持流畅,即使在网络活动繁忙时...

    异步非阻塞socket聊天室程序

    相反,异步非阻塞模式允许进程在等待数据时立即返回,继续处理其他任务,当数据准备就绪时,操作系统通过事件通知(如IO完成端口或信号量)来唤醒进程。这种方式提高了系统的并发处理能力,更适用于高并发的聊天室...

Global site tag (gtag.js) - Google Analytics