SOCKET-IO复用技术

三种模型性能分析
1.select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开
的文件描述符个数并不能改变select监听文件个数
select函数的使用
2)select函数实现单进程处理TCP服务器的多个套接字
3)select作为延时阻塞的实现与应用场景
4.epoll
1)epoll函数实现单进程处理TCP服务器的多个套接字
5,五个I/O模型
6,阻塞I/O 非阻塞I/O I/O复用(select和poll) 信号驱动I/O 异步I/O
当我们把一个套接口设置为非阻塞方式时,即通知内核:当请求的I/O操作非得让进程睡眠不能完成时,不要让进程睡眠,而应返回一个错误
7I/O复用模型
有了I/O复用,我们就可以调用select或poll,在这两个系统调用的某一个上阻塞,而不是真正阻塞于真正的I/O系统调用
异步I/O模型
8I/O复用
如果一个或多个I/O条件满足(例如:输入已准备好被读,或者描述字可以承接更多输出的时候)我们就能够被通知到,这样的能力被称为I/O复用,是由函数select和poll支持的
9,select函数作用
这个函数允许进程指示内核等待多个事件中的任一个发生,并仅在一个或多个事件发生或经过某指定的时间后才唤醒进程,
10,我们可以调用函数select并通知内核仅在下列情况发生时才返回:
集合{1,4,5}中的任何描述子准备好读 或
集合{2,7}中的任何描述字准备好写或
集合{1,4}中的任何描述字有异常条件待处理或
已经过了10.2秒
也就是说,通知内核我们对哪些描述字感兴趣
(读、写或异常条件)以及等待多长时间。
11,包含头文件<sys/select.h><sys/socket.h>
功能:提供了即时响应多个套接的读写事件
原型:
int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *except,const struct timeval *timeout);
参数
maxfdp1:等待最大套接字值加1,(等待套接字的数量)
readset:要检查读事件的容器
writeset:要检查写事件的容器
timeout:超时时间
返回值:返回触发套件接字的个数
中间的三个参数readset、writeset和exceptset指定我们要让内核测试读、写和异常条件所需的描述字
如果我们对某个条件不感兴趣,这三个参数中相应的参数就可以设为空指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值