四、I/O管理

简介: 四、I/O管理

四、I/O管理




(1)同步、异步区别?阻塞、非阻塞区别?


同步、异步:
1. 同步是指在发起一个调用之后,调用者需要一直等待调用结果的通知,才能进行后续的操作;
2. 异步是指在发起一个调用之后,调用者不能立即得到调用结果的返回,需要被调用者通过状态、通知和回调来通知调用者。
//需要注意的是,同步/异步强调的是消息通信机制。


阻塞、非阻塞:
1. 阻塞是指在发起一个调用之后,在消息返回之前,当前进(线)程会被挂起,直到有消息返回,当前进程才会被激活;
2. 非阻塞是指在发起一个调用之后,不会阻塞当前进程,而会立即返回。
//需要注意的是,阻塞/非阻塞强调的是等待消息时的状态。


(2)Linux的I/O模型包含哪五种?各自有什么特点?


1. 阻塞IO:调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。
2. 非阻塞IO:非阻塞等待,每隔一段时间就去检测IO事件是否就绪。没有就绪就可以做其他事。
3. 信号驱动IO:Linux用套接口进行信号驱动IO,安装一个信号处理函数,进程继续运行并不阻塞,当IO时间就绪,进程收到SIGIO信号。然后处理IO事件。
4. IO复用/多路转接IO:linux用select/poll函数实现IO复用模型,这两个函数也会使进程阻塞,但是和阻塞IO所不同的是这两个函数可以同时阻塞多个IO操作。而且可以同时对多个读操作、写操作的IO函数进行检测。知道有数据可读或可写时,才真正调用IO操作函数。
5.异步IO:Linux中,可以调用aio_read函数告诉内核描述字缓冲区指针和缓冲区的大小、文件偏移及通知的方式,然后立即返回,当内核将数据拷贝到缓冲区后,再通知应用程序。


  • 同步I/O


  • 阻塞I/O:进程保持阻塞状态,直到数据拷贝完成;



  • 非阻塞I/O:轮询检查内核数据,直到数据准备好,再拷贝数据到进程,进行数据处理;需要注意的是,拷贝数据的过程中,进程依然是阻塞装填;



  • 多路复用I/O:进程调用selectpollepoll函数,保持阻塞状态,但与阻塞I/O不同的是,这些函数可以同时处理多个I/O;



  • 信号驱动I/O:首先建立一个信号处理函数,进程继续运行并不阻塞,当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中处理数据;



  • 异步I/O:在发起一个调用之后,调用者不能立即得到调用结果的返回,需要被调用者通过状态、通知和回调来通知调用者。



这五种模型的比较如下图所示:



(3)说一说异步编程的事件循环


事件循环就是不停循环等待时间的发生,然后将这个事件的所有处理器,以及它们订阅这个事件的时间顺序依次执行。当这个事件的所有处理器都被执行完毕之后,事件循环就会开始继续等待下一个事件的触发,不断往复。
当同时并发地处理多个请求时,以上的概念也是正确的,可以这样理解:在单个的线程中,事件处理器是一个一个按顺序执行的。即如果某个事件绑定了两个处理器,那么第二个处理器会在第一个处理器执行完毕后,才开始执行。在这个事件的所有处理器都执行完毕之前,事件循环不会去检查是否有新的事件触发。在单个线程中,一切都是有顺序地一个一个地执行的。


(4)SPOOLing技术


为了缓和CPU的高速性与I/O设备低速性之间的矛盾,引入了假脱机技术。
引入输入井和输出井,输入井和输出井是指在磁盘开辟出的两个存储区域。
//输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。
//输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。
在SPOOLing技术下,CPU要打印机打印的数据可以先输出到磁盘的输出井中(这个过程由输出进程控制),然后做其他的事情。若打印机此时被占用,则SPOOLing系统就会把这个打印请求挂在等待队列上,待打印机有空时再把数据打印出来。向磁盘输出数据的速度比向打印机输出数据的速度快,因此就节省了时间。
应用:共享打印机
SPOOLinge技术的特点:提高了I/O的速度;将独占设备改造为共享设备;实现了虚拟设备功能。
以空间换取时间的技术


目录
相关文章
|
4月前
|
Go API
进城内优雅管理多个服务
进城内优雅管理多个服务
|
Java Android开发 API
Android电源管理系列之PowerManagerService(二)
WakeLock机制 PowerManager.WakeLock 为了延长电池的使用寿命,Android设备会在一段时间后使屏幕变暗,然后关闭屏幕显示,直至停止CPU进入休眠。
1838 0
|
5月前
|
存储 Kubernetes 容器
k8s卷管理-2
k8s卷管理-2
33 2
|
5月前
|
存储 Kubernetes 调度
k8s卷管理-1
k8s卷管理-1
33 2
|
7月前
|
测试技术
有效管理
有效管理
有效管理
|
7月前
|
监控 测试技术 项目管理
问题管理
问题管理
|
缓存 Linux 数据库
Linux软件安装和管理
Linux软件安装和管理
97 0
|
Java Android开发 监控
Android电源管理系列之PowerManagerService(一)
  PowerManagerService 提供Android系统的电源管理服务,主要功能是控制系统待机状态,屏幕显示,亮度调节,光线/距离传感器的控制等。
2669 0
|
应用服务中间件 容器 Docker
|
Go SoC 测试技术