Linux—TCP_server端编写多路转接之EPOLL

本文详细介绍了Linux中如何使用EPOLL替代select实现TCP Server,阐述了EPOLL的高效性和主要函数用法,包括epoll_create、epoll_ctl、epoll_wait,并总结了EPOLL的性能优势,如红黑树结构、避免重复设置事件、回调函数机制等。
摘要由CSDN通过智能技术生成
1、前言

之前我有写过 利用多路转接的select的TCP_server,但当时我们提到了很多关于select的缺点:

1、select可监听的文件描述符有上限制;
2、因为select参数是输入输出型的,所以每次重新设置select时,都需遍历式设置,对性能有一定的影响
3、用户增多时,多次重复遍历和频繁内核与进程数据拷贝(多次的返回)
4、需要自己维护一个数组/链表,对文件描述符的管理,实现也比较复杂
5、每次多需要重新设置select—将fd设置从用户拷贝到内核

基于这么多的缺和实现的复杂,所以我们基本不会使用select来实现,而今天的主题epoll对这些问题都进行解决

2、epoll
    epoll man手册上说linux2.6后性能最好的!!!

为什么性能好呢?
我们来看张图:
这里写图片描述
再来学习epoll的函数:
epoll有三个函数:
1、int epoll_create(int size); //创建epoll(创建红黑树)

  • 参数size :对内核的提醒(建议)空间大小,man手册解释size可以被忽略
  • 返回值: 返回一个epoll句柄,用于对红黑树的操作,在使用完epoll之后,因使用close()关闭;

2、int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) //设置红黑树

  • 参数:epfd , 红黑树的句柄
  • 参数:op,操作方式,有以下三种:
    EPOLL_CTL_ADD :添加事件(在红黑树上添加节点)
    EPOLL_CTL_MOD:更改事件(改变红黑树指定节点事件发生条件)
    EPOLL_CTL_DEL:删除事件(删除节点)
  • 返回值: 成功返回 0、失败返回-1;

3、int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);//等待事件就绪函数

           typedef union epoll_data {
               void    *ptr;
               int      fd;
               uint32_t u32;
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值