5种I/O模型

helloworld_82566120
• 阅读 1950
  • 阻塞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: 5种I/O模型

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

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

2. 非阻塞I/O:

5种I/O模型

  • 阶段1:进程不阻塞

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

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

  • 阶段2:进程阻塞

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

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

3. 多路复用I/O:

5种I/O模型

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

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

4. 异步I/O:

5种I/O模型

  • 阶段1:进程不阻塞
  • 阶段2:进程不阻塞

5. 信号驱动I/O:

5种I/O模型

  • 阶段1:进程不阻塞
  • 阶段2:进程阻塞

总结:

5种I/O模型

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
javaIO2
NIO新的输入/输出(NIO)库是在JDK1.4中引入的,弥补了原来的I/O的不足,提供了高速的、面向块的I/O。1.1流与块I/O与NIO最重要的区别是数据打包和传输的方式,I/O以流的方式处理数据,而NIO以块的方式处理数据。面向流的I/O一次处理一个字节数据:一个输入流产生一个字
Wesley13 Wesley13
3年前
Java NIO选择器【源码笔记】
目录一、I/O复用模型回顾二、创建选择器1.Pipe函数2.Poll函数三、注册Channel到Selector四、Select返回就绪事件集合一、I/O复用模型回顾!(https://oscimg.oschina.net/oscnet/01e7f742f41c502c3ae941a
Wesley13 Wesley13
3年前
IO模型详解及应用
如何阅读这篇文章顺序1.1:了解同步异步和阻塞非阻塞    1.11:同步异步    1.12:阻塞非阻塞1.2:了解一次read操作需要的步骤1.3:五种模型1.1:I/O模型中的同步异步,阻塞非阻塞:1.11:同步和异步:synchronous,asyncronous
Stella981 Stella981
3年前
Netty(二)
一、先讲下NIO编程。NIO(NonblockI/O),亦叫做非阻塞I/O与Socket类和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。1 缓冲区Buffer这里首先介绍缓冲区的概念,NIO和原I/O的一个重要区别就是NIO库中,所有数据都是用缓
Stella981 Stella981
3年前
Redis和多路复用模型
作者:Rico原文:hogwartsrico.github.io/2020/06/24/RedisandMultiplexing/几种I/O模型为什么Redis中要使用I/O多路复用这种技术呢?首先,Redis是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的
Stella981 Stella981
3年前
NVMe协议笔记分享
NVMe概述NVMe是一个针对基于PCIe的固态硬盘的高性能的、可扩展的主机控制器接口。NVMe的显著特征是提供多个队列来处理I/O命令。单个NVMe设备支持多达64K个I/O队列,每个I/O队列可以管理多达64K个命令。当主机发出一个I/O命令的时候,主机系统将命令放置到提交队列(SQ),然后使用门铃寄存器(DB)通知NVMe设
Stella981 Stella981
3年前
Netty学习三:线程模型
1Proactor和ReactorProactor和Reactor是两种经典的多路复用I/O模型,主要用于在高并发、高吞吐量的环境中进行I/O处理。I/O多路复用机制都依赖于一个事件分发器,事件分离器把接收到的客户事件分发到不同的事件处理器中,如下图:!(https://oscimg.oschi
Wesley13 Wesley13
3年前
Java并发(五)任务间使用管道进行通信
通过I/O在线程间进行通信通常很有用。提供线程功能的类库以“管道”的形式对线程间的I/O提供了支持。它们在JavaI/O类库中的对应物就是PipedWriter(允许任务向管道写)和PipedReader(允许不同的任务从同一个管道中读取)。这个模型可以看做是“生产者消费者”问题的变体,这里的管道就是一个封装好的解决方案。管道基本上是一个阻塞队列,
虚拟化技术 - CPU虚拟化
物理机器是由CPU,内存和I/O设备等一组资源构成的实体。虚拟机也一样,由虚拟CPU,虚拟内存和虚拟I/O设备等组成。VMM(VMMonitor)按照与传统OS并发执行用户进程的相似方式,仲裁对所有共享资源的访问。本文将分别讨论CPU虚拟化、内存虚拟化和I/O虚拟化技术的原理和实现。
helloworld_82566120
helloworld_82566120
Lv1
儿童见说深惊讶,却问何方是故乡。
文章
1
粉丝
0
获赞
0
热门文章

暂无数据