select/poll笔记

IO等于 等待加拷贝!
recv == 读io == 读事件就绪+内核数据拷贝至用户空间
send == 写io == 写事件就绪+用户空间数据拷贝至内核
高效IO的本质是:尽可能减少等的比重

在这里插入图片描述

自己等自己钓:同步IO
让别人钓,自己走了:异步IO

select 和poll 和 epoll 只负责IO中的等待
在这里插入图片描述
操作系统收到信息会向进程发送这个信号

select只负责等
select一次可以等多个fd

以阻塞方式等代码
在这里插入图片描述

在这里插入图片描述

修改成非阻塞方式代码,-1是read读取失败
在这里插入图片描述

在这里插入图片描述

区别下是底层数据没有就绪 还是真的读取失败
EAGAIN == 11 ==tryagain
表示缓冲区没数据可以读
在这里插入图片描述
在这里插入图片描述
nfds : 最大的文件描述符+1 我如果要等1和7 这里填写8
在这里插入图片描述
timeval:填几秒就是阻塞方式等待几秒

返回值:已经有几个文件描述符准备就绪
= 0 : 等待超时
-1:失败,错误
fd_set:文件描述符集合
fd_set:既是输入型参数,又是输出型参数,输入是用户想告诉操作系统,输出是操作系统想告诉用户
在这里插入图片描述
告诉操作系统,帮我关心这些文件描述符上的读事件是否就绪,其他同理

fd_set是一个位图结构 比特位的位置代表是哪一个文件描述符在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
sock如果有新请求,这个请求是以读事件来让操作系统报告给用户的。

在这里插入图片描述
timeout :null 阻塞方式等待
0:进去就马上扫描,有就有,没有也给我马上返回,不等
具体的数组:以阻塞方式等待指定秒数/在这里插入图片描述
在这里插入图片描述
实验现象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
recv中的Buf是用户定义的缓冲区

在这里插入图片描述
size_t len期望读的长度比缓冲区数据存在长度大也没关系,不会被阻塞,实际读多少,这个函数返回多少

在这里插入图片描述
在这里插入图片描述
select可以等的文件描述符的数量是有上限的
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

POLL没有上限,
POLL将输入输出分离
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多路转接适合长连接

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值