UNP阅读笔记 第六章 I/O复用:select和poll函数

I/O复用:select和poll函数

1.I/O复用是啥?
进程需要一种预先告知内核的能力,使得内核一旦发现进程指定一个或多个I/O条件就绪(输入已经准备好被读取,或者描述符已经能承接更多的输出),他就通知进程。这就是I/O复用。
I/O复用典型使用在以下场景:
①当客户处理多个描述符时,必须使用I/O复用。
②一个客户同时处理多个套接字是可能的,不过很少见。
③如果一个服务器要处理监听套接字,又要处理已连接套接字。
④ 如果一个服务器既要处理TCP又要处理UDP
⑤如果一个服务器要处理多个服务或多个协议

2.I/O模型
UNIX下的5中I/O模型:
①阻塞式I/O
②非阻塞式I/O
③I/O复用
④信号驱动I/O
⑤异步I/O
一个输入操作一般包括两部分:①等待数据准备好②从内核向进程复制数据
阻塞式I/O模型:最流行的I/O模型
非阻塞式I/O:当所请求的I/O操作非要把本进程投入睡眠才能完成时,不要把本进程投入睡眠,而是返回一个错误。
I/O复用:调用select和poll,阻塞在这两个系统调用的某一个之上,而不是阻塞在真正的I/O系统调用之上。
同步I/O和异步I/O对比, 同步导致请求进程阻塞,知道I/O操作完成为止。异步不导致请求进程阻塞。
在这里插入图片描述
3.select函数
该函数允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它。

4.str_cli函数
select重写select函数后,这样服务器进程一终止,客户就能马上得到通知。
调用select 处理可读套接字,如果在select返回时套接字是可读的,那就先readline读入回射文本行,再用fputs输出它。
使用select的str_cli函数的实现
处理可读输入:如果标准输入可读,那就先fgets读入一行文本,再用writen把它写到套接字中。

5.shutdown函数
终止网络的连接通常调用close函数。close有两个限制可通过shutdown来避免。

6.pselect函数
pselect比select有两个变化,①pselect使用timespec结构,而不是timeval结构。②pselect函数增加了六个参数。

7.poll函数
poll函数提供的功能和select类似。不过在处理流设备时,它能提供格外的信息。

8.总结
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值