• select
○ 触发机制
§ 条件触发
○ 描述符
§ 三种类型
□ 可读
□ 可写
□ 异常
§ 默认最大1024个
§ 每次响应之后会改变描述符集合,需要手动重置
○ 检测结果
§ 需要用FD_ISSET对每个描述符进行判断
• poll
○ 触发机制
§ 条件触发
○ 描述符
§ 个数没有限制
§ 用结构体pollfd表示
□ 包含文件描述符、待检测的事件类型、返回事件类型
□ 通过二进制掩码对事件类型和返回类型进行操作
□ 若不想检测,可将fd设置为-1
§ 类型
□ 可读
□ 可写
□ 错误(无法提交检测请求,只能通过返回事件检测)
§ 可以控制pollfd数组的大小,从而动态控制检测的数量
○ 返回值
§ -1:有错误
§ 0:超时且没有任何事件发生
§ n:检测到的事件的个数
○ 检测结果
§ 会返回检测到事件的个数,但仍然需要遍历pollfd数组获取结果,数组中不一定都是发生了事件
• epoll
○ 触发机制
§ 默认条件触发
§ 可设置为边缘触发
○ 事件类型
§ 可读
§ 可写
§ 套接字一端关闭,或者半关闭
§ 文件描述符被挂起
§ 边缘触发
○ 返回值
§ -1:有错误
§ 0:超时且没有任何事件发生
§ n:发生的事件的个数
○ 检测结果
§ 返回的epoll_event数组大小由n决定,只需遍历大小等于实际事件发生数量的数组即可,数组中都是发生了的事件
linux下几种IO多路复用方式的总结
最新推荐文章于 2024-08-14 15:41:15 发布