linux下五种i o的复用模式,Linux中五种常见的I/O模型

一般来说,程序进行输入操作有两步:等、搬迁 。

在Linux下,共有五种I/O模型,下面就逐一介绍:

1>.阻塞I/O(使用比较广)

应用程序调用一个I/O函数,如果数据木有准备好,就会导致应用程序阻塞,直到数据准备好了,从内核拷贝到用户空间(进程的缓存),I/O函数返回成功。

如一个进程调用recvform,然后系统调用并不返回直到有数据包到达本地系统,然后完成数据拷贝。

33460FuxAGtFKfQ2mCBnmDTPgKrV-0Uv7

2>.非阻塞I/O(极浪费CPU资源,不常使用)

我们把一个套接口设置为非阻塞,就是告诉内核,当请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。通过I/O操作函数不断地测试数据是否准备好,如果木有准备好,继续测试(轮询),直到数据准备好,从内核拷贝到用户空间,I/O函数返回成功。

33460Fk0Hek2_kIR-NpLNJOBu_BfvdRXk

3>.I/O复用(实用的服务器程序)

使用select、poll、epoll l函数,也会使进程阻塞,但是和阻塞I/O不同的是,这些函数可以同时阻塞多个I/O操作,并且可以同时对多个读、写操作的I/O操作函数进行检测,直到有数据可读、可写时,才真正调用I/O操作函数,从内核拷贝到用户空间,I/O函数返回成功。

33460FgkHgpxplQVLuKp9_I2Qs1ZGYPnf

4>.信号驱动I/O(SIGIO)

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

33460Fv2CJ8l9uq7Z4gd-PFxBxx1TqHAu

5>.异步I/O

让内核拷贝完成之后通知我们。

33460FksKKgNJ5ejybzflMchmmBGBbuOJ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值