- 时间:2022-09-07 01:44 编辑: 来源: 阅读:281
- 扫一扫,手机访问
摘要:图形IO模型-AIO NIO bio
{网站源码}
操作系统分为客户空间和内核空间。出于安全原因,应用程序不能直接操作内核空间中的数据。 当应用程序发起I/O操作时,需要经历两个步骤:等待数据和复制数据。这两个步骤的不同解决方案会导致不同的IO模型。 我们把数据读取分为两步:step1,数据准备:数据从硬件拷贝到内核缓冲区,这里的硬件可以是磁盘、网卡等设施。 第二步复制数据阶段:数据从内核缓冲区复制到客户机空间缓冲区。IO操作可以分为:阻塞IO。非阻塞io可分为:同步IO异步IO生物同步阻塞IO应用程序进程阻塞,直到发起读调用后数据读取完成。在这个过程中,客户端进程将让CPUBIONIO应用程序进程启动一个读操作,并在数据未准备好时立即返回。客户端进程不会阻塞,可以继续执行其他任务。 同时,读取轮询会持续启动,直到数据准备就绪,然后进程会阻塞并等待数据从内核空间复制到来宾空间。 在step1中,客户端进程是非阻塞的,step2是阻塞的(同步的),所以称为同步非阻塞IO。 IO复用当有很多IO进程时,每个进程轮询数据,会占用大量CPU。因此,在NIO的基础上引入了select,它将监控多个IO通道。当一个IO通道的数据准备好时,会发送事件唤醒相应的进程,从而实现多进程IO复用选择,降低CPU消耗。 当多路AIO应用程序进程发起读调用时,它向操作系统内核注册一个回调函数,read立即返回;准备内核数据,将数据复制到来宾空间,并回调该函数。 AIO·AIO没有NIO受欢迎,因为Linux只支持文件AIO,而不支持网络AIO。