I/O多路转接

本文介绍了Linux中的高级I/O模型,包括阻塞式、非阻塞式、信号驱动I/O和多路转接/多路复用I/O。重点讲述了多路转接,通过select和epoll实现,分析了它们的工作原理、优缺点及使用示例。
摘要由CSDN通过智能技术生成

高级I/O

在Linux中,我们可以将所有的I/O都分为两步,第一步就是等,第二步是数据拷贝

在学习编程的初级阶段,就可以发现I/O是一种十分浪费资源的行为,而这种资源的浪费主要是存在I/O的第一个阶段,即就是等待阶段。

对于I/O的理解,主要可以通过scanf函数,如果调用scanf函数,则执行流就会等待用户进行I/O操作,之后执行流才会执行下面的内容,但是scanf这种I/O模型只是Linux中I/O模型的一种。

阻塞式I/O

阻塞式I/O就是执行流会阻塞在要发生I/O的位置,等待I/O时间的发生

阻塞式I/O是我目前最常见的I/O模型,从最早的scanf函数开始,就已经接触到了阻塞式I/O。

非阻塞式I/O

非阻塞式I/O表示执行流不会停在将要发生I/O的位置,当执行流到达I/O发生的位置,执行流会去检测目前I/O动作是否发生,如果没有发生则并不阻塞,而是设置error,可以去做另外的一些任务,但必须对I/O时间进行循环检测,该循环机制是由程序员来控制的

目前我接触过的非阻塞I/O并不多,仅仅是在做项目时使用过recv的非阻塞I/O模式。

信号驱动I/O

信号驱动I/O是指执行流到达将要发生I/O的位置时也并不会去检测此时I/O是否发生,而是继续执行程序的代码,当I/O动作发生时,操作系统会向进程发送信号,此时进程就会立即进行数据的拷贝

键盘输入即就是一种信号驱动I/O,当键盘发生I/O动作时会立即触发CPU中断。

多路转接/多路复用I/O

多路转接I/O的意思是将多个文件描述符交给一个对象来管理,每一次检测,管理的对象就会检测相应的文件描述符是否有进行I/O行为

异步I/O

前四种I/O模型都是同步I/O,同步I/O必须自己进行等待和数据的拷贝,异步I/O不用自己进行等待和数据的拷贝

非阻塞I/O

一个文件描述符默认情况下都是采用阻塞I/O的。使用系统调用接口可以改变文件描述符的I/O模式。

#include <fcntl.h>
#include <unistd.h>

int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值