Linux 软件编程多路复用tcp

1.select的缺点:

1.select监听的文件描述符集合是一个数组,有上限(1024个)

2.select监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销

3.select需要用户手动查找产生事件的文件描述符

4.select只能工作在水平触发模式(低速模式)而无法工作在边沿触发模式(高速模式)

2.poll

int poll(struct pollfd *fds, nfds_t nfds, int timeout);

功能:

监听文件描述符集合,工作方式类似于select

参数:

fds:文件描述符集合首地址

nfds:文件描述符集合的数组的长度

timeout:超时时间,单位毫秒,-1表示永久等待

返回值:

成功返回产生事件文件描述符个数

失败返回-1

超时仍然没有产生的事件返回0

struct pollfd {

int fd; /* file descriptor */

short events; /* requested events */

short revents; /* returned events */

};

1.poll的缺点:

1.poll监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销

2.poll需要用户手动查找产生事件的文件描述符

3.poll只能工作在水平触发模式(低速模式)而无法工作在边沿触发模式(高速模式)

3.epoll

1.epoll_create

int epoll_create(int size);

功能:

在内核层创建一张epoll监听的事件表

参数:

size:监听的事件表大小

返回值:

成功返回新的文件描述符

失败返回-1

2.epoll_ctl

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

功能:

管理内核中epoll事件表

参数:

epfd:文件描述符

op: EPOLL_CTL_ADD 添加客户端

EPOLL_CTL_MOD 修改客户端

EPOLL_CTL_DEL 删除客户端

fd:文件描述符

event:事件结构体

返回值:

成功返回0

失败返回-1

typedef union epoll_data {

void *ptr;

int fd;

uint32_t u32;

uint64_t u64;

} epoll_data_t;

struct epoll_event {

uint32_t events; /* Epoll events */

epoll_data_t data; /* User data variable */

};

events:EPOLLIN EPOLLOUT EPOLLET

3.epoll_wait

int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

功能:

监听epfd对应的事件表中是否有事件发生

参数:

epfd:文件描述符

events:存放产生事件的数组空间首地址

maxevents:最多存放数组元素个数

timeout:超时时间,单位毫秒,-1表示永久等待

返回值:

成功返回实际发生事件的个数

失败返回-1

超时仍然没有产生事件返回0

epoll的优点:

1.epoll没有文件描述符上限限制

2.epoll监听的事件表在内核层,内核监听事件不需要操作用户层空间提高效率

3.epoll会获得产生事件的文件描述符,不需要用户查找

4.epoll可以工作在边沿触发模式(高速模式),提高效率

相关推荐
晚风_END1 小时前
Linux|操作系统|zfs文件系统的使用详解
linux·运维·服务器·数据库·postgresql·性能优化·宽度优先
一切皆是因缘际会7 小时前
从概率拟合到内生心智:2026 下一代 AI 架构演进与落地实践
人工智能·深度学习·算法·架构
Java成神之路-7 小时前
【LeetCode 刷题笔记】34. 在排序数组中查找元素的第一个和最后一个位置 | 二分查找经典刷题题解
算法·leetcode
小e说说7 小时前
拯救孩子学习兴趣大作战!这些软件超神了
学习
不忘不弃7 小时前
用BFS方法求解平分汽油问题
算法·宽度优先
AI科技星7 小时前
全域数学·72分册·射影原本 无穷维射影几何卷细化子目录【乖乖数学】
人工智能·线性代数·算法·机器学习·数学建模·数据挖掘·量子计算
暴力求解7 小时前
Linux---线程基础
linux·运维·服务器
风落无尘7 小时前
《智能重生:从垃圾堆到AI工程师》——第四章 变化的艺术
人工智能·线性代数·算法
JAVA面经实录9177 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
晚风_END7 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发