TCP并发模型:
1.TCP多线程模型:
缺点:
1.创建线程会带来资源开销,能够实现的并发量比较有限
2.IO模型:
1.阻塞IO:
没有数据到来时,可以让任务挂起,节省CPU资源开销,提高系统效率
2.非阻塞IO:
程序未接收到数据时一直执行,效率很低
3.异步IO
只能绑定一个文件描述符用来读取数据
4.多路复用IO
select //监听集合
1.select监听的集合中的文件描述符有上限限制
2.select有内核层向用户层数据空间拷贝的过程,占用系统资源开销
3.select必须轮询检测产生事件的文件描述符
4.select只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)
poll //监听数组
1.poll有内核层向用户层数据空间拷贝的过程,占用系统资源开销
2.poll必须轮询检测产生事件的文件描述符
3.poll只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)
epoll //监听内核空间中的一个事件表
epoll_create
epoll_ctl
epoll_wait
函数接口:1.select
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
功能:
select监听文件描述符集合中是否有文件描述编程ready状态
功能:
nfds:最大文件描述符的值+1
readfds:读文件描述符集合
writefds:写文件描述符集合
exceptfds:其余文件描述符集合
timeout:等待的时长
NULL 一直等待
返回值:
成功返回文件描述符集合中的文件描述符个数
失败返回-1
void FD_CLR(int fd, fd_set *set);
功能:
将文件描述符fd从集合中清除
int FD_ISSET(int fd, fd_set *set);
功能:
判断文件描述符fd是否仍在集合中
void FD_SET(int fd, fd_set *set);
功能:
将文件描述符fd加入到集合中
void FD_ZERO(fd_set *set);
功能:
将文件描述符集合清0
2.pollint poll(struct pollfd *fds, nfds_t nfds, int timeout);
功能:
监听文件描述符集合是否有事件发生
参数:
fds:监听文件描述符集合数组空间首地址
nfds:监听文件描述符集合元素个数
timeout:等待的时间(-1 一直等待)
返回值:
成功返回产生事件的文件描述符个数
失败返回-1
struct pollfd {
int fd; /* file descriptor */
short events; /* requested events */
short revents; /* returned events */
};
fd:监听的文件描述符
events:要监听的事件 POLLIN:是否可读 POLLOUT:是否可写
revents:实际产生的事件
3.epollint epoll_create(int size);
功能:
创建一张内核事件表
参数:
size:事件的个数
返回值:
成功返回文件描述符
失败返回-1
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:
事件对应的事件
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 */
};
返回值:
成功返回0
失败返回-1
epoll_wait
int epoll_wait(int epfd, struct epoll_event *events,
int maxevents, int timeout);
功能:
监听事件表中的事件
参数:
epfd:文件描述符
events:存放实际产生事件的数组空间首地址
maxevents:最多存放事件的个数
timeout:设定监听的时间(超过该时间则不再监听)
-1 一直监听直到有事件发生
返回值:
成功返回产生事件的文件描述符个数
失败返回-1
如果时间达到仍没有事件发生返回0
TCP并发模型 || select || poll || epoll
十万个秋刀鱼2024-03-16 21:59
相关推荐
云云32114 分钟前
云手机:Facebook多账号管理的创新解决方案在路上走着走着39 分钟前
openEuler安装OpenGauss5.0上海运维Q先生1 小时前
面试题整理17----K8s中request和limit资源限制是如何实现的余~~185381628001 小时前
矩阵碰一碰发视频源码技术解析,支持OEM噠噠噠@1 小时前
HCIE-day9-OSPF张声录12 小时前
【ETCD】【实操篇(十五)】etcd集群成员管理:如何高效地添加、删除与更新节点天乐敲代码2 小时前
Etcd静态分布式集群搭建chengma_0909092 小时前
MySQL 数据库连接数查询、配置TDengine (老段)2 小时前
两分钟掌握 TDengine 全部写入方式