文章目录
- 什么是高级I/O
- 五种常见高级I/O
- 同步IO和异步IO
- 多路转接是异步IO吗
什么是高级I/O
高级I/O(Advanced I/O)是指在计算机系统中进行输入和输出操作时使用的一种更高级的接口和技术。它提供了比传统的基本I/O操作更丰富和灵活的功能,以满足更复杂的应用需求。
高级I/O通常具有以下特点:
异步操作:高级I/O支持异步操作,即可以在进行输入/输出操作时不阻塞程序的执行,提高了系统的并发性能。
缓冲机制:高级I/O通常会使用缓冲区来存储数据,以减少对底层设备的频繁访问,提高数据传输的效率。
多路复用:高级I/O支持多路复用技术,可以同时处理多个输入/输出操作,提高系统的响应能力。
支持更多的数据类型:高级I/O可以处理更多种类的数据,例如文件、网络数据、内存映射文件等。
五种常见高级I/O
(说的比较空泛概览一下就行)
阻塞式IO模型(Blocking IO):应用程序向操作系统发起IO请求后,会一直等待直到IO操作完成,期间无法执行其他任务。
非阻塞式IO模型(Non-blocking IO):应用程序向操作系统发起IO请求后,会立即返回,无需等待IO操作完成,但需要不断轮询IO操作是否完成,期间可以执行其他任务。
IO复用模型(IO Multiplexing):应用程序将多个IO请求注册到一个IO复用器(如select、poll、epoll等),当其中一个IO操作完成时,IO复用器会通知应用程序进行处理,期间可以执行其他任务。——也就是多路转接
IO模型中的多路转接(Multiplexing)是一种基于事件驱动的IO处理方式,通过使用IO复用器(如select、poll、epoll等)来同时监听多个IO事件,从而实现对多个IO操作的管理和处理。在多路转接模型中,应用程序将多个IO请求注册到IO复用器中,并通过IO复用器等待事件的发生。当其中一个IO事件就绪(如可读、可写等)时,IO复用器会通知应用程序,应用程序可以根据具体的事件类型进行相应的处理。多路转接模型的优势在于可以同时处理多个IO事件,避免了阻塞式IO模型中的等待时间,提高了IO的效率和吞吐量。同时,多路转接模型也适用于非阻塞式IO模型,可以实现对多个非阻塞IO操作的管理和处理。常见的多路转接模型有select、poll和epol
信号驱动式IO模型(Signal-driven IO):应用程序向操作系统发起IO请求后,继续执行其他任务,当IO操作完成时,操作系统向应用程序发送一个信号,应用程序收到信号后进行处理。
异步IO模型(Asynchronous IO):应用程序向操作系统发起IO请求后,无需等待IO操作完成,操作系统会在IO操作完成后通知应用程序进行处理,期间可以执行其他任务
同步IO和异步IO
(说的比较空泛概览一下就行)
(多线程同步和IO同步是两种截然不同的概念,是没有关系的)
同步和异步关注的是消息通信机制.
所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回. 但是一旦调用返回,就得到返回值了; 换句话说,就是由调用者主动等待这个调用的结果;
异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果; 换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果; 而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用.
同步IO(Synchronous IO)和异步IO(Asynchronous IO)是两种不同的IO操作模型,它们的主要区别在于IO请求的发起和处理方式。
同步IO:在同步IO模型中,应用程序发起IO请求后会阻塞等待IO操作完成,直到数据就绪或超时才能继续执行后续操作。同步IO是一种阻塞式的IO模型,应用程序需要主动等待IO操作的完成,无法同时处理其他任务。同步IO适用于IO操作相对简单且数据量较小的场景。
异步IO:在异步IO模型中,应用程序发起IO请求后无需等待IO操作完成,可以继续执行其他任务。当IO操作完成后,操作系统会通知应用程序进行处理。异步IO是一种非阻塞式的IO模型,应用程序可以并发处理多个IO操作。异步IO适用于需要并发处理多个IO操作或IO操作耗时较长的场景。
多路转接是异步IO吗
多路转接(Multiplexing)是一种IO模型,它可以用于实现异步IO。虽然多路转接本身并不是异步IO的具体实现方式,但它是一种常用的用于实现异步IO的技术手段。
在多路转接模型中,应用程序可以同时监听多个IO事件,并通过IO复用器(如select、poll、epoll等)等待事件的发生。当其中一个IO事件就绪时,IO复用器会通知应用程序进行处理。这种方式可以实现对多个IO操作的并发处理,从而提高IO的效率和吞吐量。
在多路转接模型中,应用程序可以将IO操作设置为非阻塞模式,使得IO操作在就绪前不会阻塞应用程序的执行。这样,应用程序可以继续执行其他任务,而不需要等待IO操作完成。这种非阻塞的特性使得多路转接模型具备了异步IO的特点。