`

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

 
阅读更多

伪代码:

void ioTest(){
    // 1
    read(socket, buffer);//这句阻塞,阻塞的情况有两种:1.当socket并没有数据时(等待数据);2.当socket有数据时(激活状态),要经历从socket的buffer读到程序空间的buffer中的时间过程
    // 2
    process(buffer);//这一句的执行必须得等上一句执行返回,因为参数buffer来源于上一句
    // 3
    doOtherNotRelateToTheSocket();//这一句所要执行的内容与socket无关,却还是要收到socket阻塞的影响,因为第一句的执行使整个线程阻塞在那里了。
}
void process(buffer){
    show(buffer.toString());
}

同步: 下一句的执行必须等上一句执行返回,例子中第二句执行的条件需要第一句执行返回;但第三句是与之前语句无关的语句,不应该是同步语句。因此可以通过给同步代码另开线程解决这个问题,即把第一和第二句放到另一个线程去,则doOtherNotRelateToTheSocket()方法不会受到阻塞
阻塞: io上的阻塞(系统调用read()后,马上返回一个状态回用户空间为非阻塞,不马上返回只有等到有数据才返回到用户空间则为阻塞)
这里有一个比较容易混淆的点,似乎阻塞就等于同步,第二第三句都要在第一句执行完后才执行(第二句位置合理,但第三句是不合适的同步)。阻塞是资源上的限制,不可改变,但同步代码可以通过启动多线程达到异步的效果。

 

高性能IO模型浅析

 

-----------------------------------------------------------------------

 

I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer),reactor与proactor模式都具有I/O多路复用的特点,区别只在于reactor属于同步IO,proactor属于异步IO。

proactor的一个重要区别地方: 在分离器等待过程中,操作系统利用并行的内核线程执行实际的读操作,并将结果数据存入用户自定义缓冲区,最后通知事件分离器读操作完成。(异步IO即应用程序操作数据时不需要才开始从IO上读取字节流,而是读取缓冲区上的数据(操作系统已经并行做了这个事情))。

 

reactor和proactor模式

reactor与proactor的概念

分享到:
评论

相关推荐

    同步异步阻塞非阻塞

    同步异步阻塞非阻塞 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,阻塞IO和非阻塞IO.pdf

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

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

    ### 同步、异步、阻塞、非阻塞的区别详解 #### 一、同步与异步 **同步**和**异步**是计算机编程中非常重要的概念,尤其是在多线程编程、网络通信以及操作系统中有着广泛的应用。这两个概念主要涉及的是**消息的...

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

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

    JAVA IO同步,异步

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

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

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

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

    在IT领域,特别是网络编程中,我们经常遇到“同步”、“异步”、“阻塞”和“非阻塞”这些概念。这些术语是理解和优化应用程序性能的关键,特别是涉及到客户端(C端)与服务器(S端)之间的通信时。 首先,让我们...

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

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

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

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

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

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

    linux异步IO.pdf

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

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

    在Java编程中,同步、异步、阻塞和非阻塞是四个重要的概念,它们涉及到多线程和并发处理,特别是在网络编程中尤为关键。理解这些概念有助于优化程序性能和提高资源利用率。 1. **同步**: 同步是编程中一种控制机制...

    同步、异步IO

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

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

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

    异步非阻塞socket聊天室程序

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

    WinSock 异步IO模型

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

    4-【Linux网络编程】同步,异步,阻塞,非阻塞-1809261

    【Linux网络编程】同步、异步、阻塞与非阻塞的概念在计算机科学特别是网络编程领域至关重要。在Linux环境下,理解和运用这些概念对于优化应用程序性能和处理并发I/O至关重要。 同步(Synchronous)I/O指的是应用...

Global site tag (gtag.js) - Google Analytics