Linux——I/O复用

本文介绍了Linux下的I/O复用技术,包括select、pselect和poll等方法,阐述了不同I/O模型的区别,并提供了相关参考资料。重点讨论了各种I/O复用函数的参数和使用场景。
摘要由CSDN通过智能技术生成

 

缅怀Stevens大师。

最好的参考资料:

1.师从互联网。

2.UNP v1第6章 。

3,man select、man pselect、man epoll、man poll

第一条:概述

复用是个伟大的概念呀!什么是I/O复用(I/O multiplexing)呢?具体点就是当你编写的程序需要同时处理多个描数字(socket或file或device),你又不知道什么时候应该(比方说有数据可以读了)去操作(读/写)哪个描数字。这时候I/O复用就需要登场了。

 

UNPv1给出了定义。I/O复用是一种让进程预先“警告”内核能力,使得内核一旦发现进程预先告知时指定的一个或多个I/O条件(就是描述符)就绪(可以读/写了),内核就通知进程。linux有4个调用可实现I/O复用:select、poll继承自Unix系统。pselect是select到Posix版。epoll是linux2.6内核特有的。

第二条:I/O模型

(0)一般输入操作通常包含如下两个阶段,请谨记:

1、等待数据准备好。

2、内核到进程的数据拷贝。

(0.1)例如对于socket上的输入操作:

1、数据从网络到达,当数据到达时,收集到内核中相应的缓冲区。

2、从内核缓冲区拷贝数据到进程端口缓冲区中。

(1)UNPv1当中总结了Unix的I/O模型:

1、阻塞I/O:进程被阻塞I/O系统调用上(read、write、sendto、recvfrom等等)直到I/O条件就绪(可读/写或异常)处理完,处理后从I/O系统调用返回进程。

2、非阻塞I/O。就是采用轮询方式调用非阻塞I/O系统调用。

 

3、I/O复用。

4、多线程阻塞I/O。把要处理的描数字分配到多个线程中,每个线程独立地调用I/O系统调用,独立处理。

 

5、信号驱动I/O。类似于I/O复用,当I/O条件就绪时使用信号通知进程去调用I/O系统调用处理。

 

6、异步I/O。通过aio_read告诉内核怎么处理,我们就不管了,内核处理完了后发个信号告诉我们,也可以用其他方式在处理完通知我们。

注:I/O系统调用是否阻塞

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值