计算机I/O模型详解:深入比较同步、异步与非阻塞
(2025-08-15 16:33:26)
标签:
it |
分类: 技术 |
https://baijiahao.baidu.com/s?id=1829670344057724353&wfr=spider&for=pc
01 计算机I/O基础
计算机组成与总线
计算机的三大核心部件为CPU、内存、I/O,总线是它们的连接纽带,分为PCI、前端总线、内存总线等。北桥芯片负责连接IO总线和CPU,起到桥接的作用,而前端总线也称为系统总线,是连接CPU与北桥的关键通道。内存总线则负责连接内存与北桥,确保内存数据的顺畅传输。
由于北桥的高速性能与IO总线的相对低速性能之间的差异,通常会引入南桥网桥。南桥上集成了众多外设控制器,如磁盘控制器和USB控制器等,以有效协调高速北桥与慢速IO总线之间的工作。
此外,总线本身分为数据总线、地址总线和控制总线。地址总线用于寻址操作,数据总线负责发送和接收数据,而控制总线则用于发送中断信号等控制指令。这种并行传输的方式,确保了I/O操作的高效性和稳定性。
I/O定义及理解
I/O是输入输出的简写,描述数据在计算机内部与外部设备之间的流动过程。这一过程不仅涉及数据的传输,更体现了计算机与外界的交互。理解I/O时,关键在于明确主体,因为不同的主体会对I/O的属性产生不同的解读。例如,人发出的指令是输入,而计算机的响应则是输出。
在计算机架构中,I/O描述了数据从存储设备到内存的转移过程。而从编程的角度来看,I/O操作通常被划分为IO调用和IO执行两个阶段,其中IO调用由进程发起,IO执行由操作系统负责完成。
02 I/O模型解析
同步与异步概述
同步IO要求进程等待操作系统的响应,而非阻塞IO则允许进程或线程在操作系统IO未就绪时执行其他任务。同步与异步是与消息通信机制相关的概念。同步意味着进程必须在发出IO调用后等待操作系统的完成通知,而异步则允许进程在请求IO操作后继续执行其他任务,操作系统会在完成后主动通知进程。
值得注意的是,阻塞与非阻塞是独立于同步与异步的概念,它们描述了进程在等待时的状态。
非阻塞与信号驱动IO
非阻塞IO允许进程在等待中运行其他任务,同时通过定期轮询检查就绪状态。以生活中类比,这样的进程就像是可以边钓鱼边做其他事情,但必须时常回来检查鱼竿,这就是一种轮询的过程。
信号驱动IO则通过信号机制来减少阻塞。在信号驱动IO中,进程通过告诉内核在数据准备就绪时发送信号,从而在不阻塞的情况下捕捉数据。这种方式下,应用进程无需持续监视描述符,也不必阻塞等待数据的到来。
多路复用与异步IO
多路复用(I/O
multiplexing)是一种可以同时监控多个文件描述符的IO模型,通过select函数可以高效地监听多个文件描述符,等到任何一个就绪时进行处理。尽管多路复用本质上仍属于阻塞IO,但相比传统的阻塞IO,其效率有显著提升。
异步IO则是最高的非阻塞程度,模型允许进程发起IO请求后立即继续执行其他任务,而不必等待内核完成数据转移。在这种模型下,内核负责主动处理数据的转移,并在完成时通知进程。
总结来看,从阻塞程度来看,各IO模型从高到低排列为:阻塞IO,非阻塞IO,信号驱动IO,多路复用,异步IO。同时,它们的效率则相反,从低到高排列。下图清晰地展示了这一趋势。
前一篇:改变血瘀体质最好的方法
后一篇:代码优化:提升程序性能的艺术

加载中…