Select和epoll的区别

本文探讨了在Linux系统中,当处理多个连接时,select和epoll两种事件处理机制的区别。select函数涉及的参数包括最大描述符值、读写错误事件文件描述符数组以及超时时间。它会将用户空间的fd_set复制到内核,检查每个描述符是否有事件发生,若无事件且有超时设置,则会睡眠等待。epoll的特点和更高效能的实现将在后续部分展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当一个节点和多个节点建立连接时,如何高效的处理多个连接的数据,下面具体分析两者的区别。

1. select函数

函数原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);

参数介绍:(1)nfds    -- fdset集合中最大描述符值加1

                  (2)fdset   -- 一个位数组,其大小限制为_FD_SETSIZE(1024)

                                位数组的每一位代表的是其对应的描述符是否需要被检查。

                         (3)readfds -- 读事件文件描述符数组

                         (4 )writefds -- 写事件文件描述符数组

                   (5)exceptfds -- 错误事件文件描述符数组

                   (6)timeout -- 超时事件,该结构被内核修改,其值为超时剩余时间。

对应内核:select对应于内核中的sys_select调用,sys_select首先将第二三四个参数指向的fd_set拷贝到内核,然后对每个被SET的描 述符调用进行poll,并记录在临时结果中(

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值