千家信息网

5种I/O模型

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,1、一次输入输出的步骤:1)等待数据就绪2)数据搬迁2、5种I/O模型1)阻塞I/O模型:应用程序调用一个I/O函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,一直等待。数据准备好了,从内
千家信息网最后更新 2026年11月01日5种I/O模型

1、一次输入输出的步骤:

1)等待数据就绪

2)数据搬迁


2、5种I/O模型

1)阻塞I/O模型:

应用程序调用一个I/O函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,一直等待。数据准备好了,从内核拷贝到用户空间,I/O函数返回成功指示。

2)非阻塞I/O:

我们把一个套接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断的测试数据是否已经准备好,如果没有准备好,继续测试,直到数据准备好为止。在这个不断测试的过程中,会大量的占用CPU的时间。

3)I/O复用模型:

I/O复用模型会用到select或者poll函数,这两个函数也会使进程阻塞,但是和阻塞I/O 所不同的的,这两个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。

相比非阻塞IO模型,在多路复用IO模型中,会有一个线程不断去轮询多个socket的状态(因为在多路复用IO模型中,只需要使用一个线程就可以管理多个socket,系统不需要建立新的进程或者线程,也不必维护这些线程和进程,所以它大大减少了资源占用)。

另外多路复用IO为何比非阻塞IO模型的效率高是因为在非阻塞IO中,不断地询问socket状态是通过用户线程去进行的,而在多路复用IO中,轮询每个socket状态是内核在进行的,这个效率要比用户线程要高的多。


4)信号驱动I/O模型:

首先我们允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。


以上I/O的数据搬迁动作是一样的,只是等待方式不一样,叫做同步I/O(所有动作是自己操作的)。


5)异步I/O模型:

调用aio_read函数,告诉内核描述字,缓冲区指针,缓冲区大小,文件偏移以及通知的方式,然后立即返回。当内核将数据拷贝到缓冲区后,再通知应用程序。


3、总结

函数 数据 阻塞 模型 准备 线程 进程 复用 信号 内核 多个 不断 多路 应用程序 状态 用户 程序 缓冲区 处理 应用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中智农互联网科技 北京路客互联网科技有限公司 互联网巨头反垄断金融科技 迪茉互联网科技 上海喔噻互联网科技 友谊互联网络科技 齐家互联网科技有限公司 山东吉时兔互联网科技有限公司 小米互联网科技园设置 昭通云南众福互联网科技有限公司 科技互联网大厂 港股科技和互联网 中国互联网公司排名锤子科技 广州新华互联网科技学校电竞方面 卓翼科技产业互联网合作 中国互联网有什么科技 有人说阿里系是互联网科技企业 北京军民互联网科技公司 安徽九吞吴互联网科技有限公司 互联网科技快速发展优美句子 金融科技与互联网金融 创业天下互联网科技有限公司 互联网科技实习生岗位职责 智腾互联网科技有限公司 互联网媒体平台算高科技产业 互联网公司黑科技创始人 互联网安防科技感 互联网高科技行业有哪些企业 10位科技互联网大佬 互联网科技快速发展优美句子
0