5种I/O模型

  • 阻塞I/O(blocking I/O)

  • 非阻塞I/O(non-blocking I/O)

  • 同步I/O(synchronous I/O)or多路复用I/O(multiplexing I/O)

  • 异步I/O(asynchronous I/O)

  • 信号驱动I/O(signal-driven I/O)

1. 阻塞I/O:

  • 第1阶段:内核准备数据,进程阻塞

  • 第2阶段:拷贝数据(从kernel缓冲区拷贝到用户缓冲区),进程阻塞

2. 非阻塞I/O:

  • 阶段1:进程不阻塞

    • 非阻塞的recvform系统调用调用之后,进程并没有被阻塞,内核马上返回给进程,如果数据还没准备好,此时会返回一个error(**EAGAIN **或 EWOULDBLOCK);

    • 进程在返回之后,可以干点别的事情,然后再发起recvform系统调用。重复上面的过程,循环往复的进行recvform系统调用;这个过程通常被称之为轮询

  • 阶段2:进程阻塞

    • 轮询检查内核数据,直到kernel数据准备好,再拷贝数据到进程,进行数据处理;

    • 拷贝数据的整个过程,进程仍然是阻塞状态

3. 多路复用I/O:

  • **阶段1:**进程有的阻塞,有的不阻塞,有的可以阻塞又可以不阻塞

    • select、poll、epoll
  • 阶段2:进程阻塞

4. 异步I/O:

  • 阶段1:进程不阻塞

  • 阶段2:进程不阻塞

5. 信号驱动I/O:

  • 阶段1:进程不阻塞

  • 阶段2:进程阻塞

总结:

点赞
收藏

评论区

加载中...

相关推荐

javaIO2

NIO新的输入/输出(NIO)库是在JDK1.4中引入的,弥补了原来的I/O的不足,提供了高速的、面向块的I/O。1.1流与块I/O与NIO最重要的区别是数据打包和传输的方式,I/O以流的方式处理数据,而NIO以块的方式处理数据。面向流的I/O一次处理一个字节数据:一个输入流产生一个字

Java NIO选择器【源码笔记】

目录一、I/O复用模型回顾二、创建选择器1.Pipe函数2.Poll函数三、注册Channel到Selector四、Select返回就绪事件集合一、I/O复用模型回顾!(https://oscimg.oschina.net/oscnet/01e7f742f41c502c3ae941a

IO模型详解及应用

如何阅读这篇文章顺序1.1:了解同步异步和阻塞非阻塞    1.11:同步异步    1.12:阻塞非阻塞1.2:了解一次read操作需要的步骤1.3:五种模型1.1:I/O模型中的同步异步,阻塞非阻塞:1.11:同步和异步:synchronous,asyncronous

Java【NIO2】- 系列 1: 为什么要写【NIO2】系列?

1\. 基本概念IO是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。所有语言运行时系统提供执行I/O较高级别的工具。(c的printfscanf,java的面向对象封装)2\.  Java标准io回顾Java标准

Netty(二)

一、先讲下NIO编程。NIO(NonblockI/O),亦叫做非阻塞I/O与Socket类和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。1 缓冲区Buffer这里首先介绍缓冲区的概念,NIO和原I/O的一个重要区别就是NIO库中,所有数据都是用缓

Redis和多路复用模型

作者:Rico原文:hogwartsrico.github.io/2020/06/24/RedisandMultiplexing/几种I/O模型为什么Redis中要使用I/O多路复用这种技术呢?首先,Redis是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的