epoll原理以及优点

epoll 是 Linux 内核优化的文件描述符管理机制,它通过红黑树存储 socket,并使用回调函数处理事件。epoll 的优点在于没有最大并发限制,高效处理大量并发连接,减少不必要的内存拷贝,且通过内核与用户空间共享内存。然而,当并发量低且所有 socket 活跃时,epoll 可能不比 poll 更快,且仅适用于 Linux 平台。
摘要由CSDN通过智能技术生成

epoll原理:
首先调用epoll_create时内核在epoll文件系统里建了个file结点;除此之外在内核cache里建立红黑树用于存储以后epoll_ctl传来的socket,当有新的socket连接来时,先遍历红黑书中有没有这个socket存在,如果有就立即返回,没有就插入红黑树,然后给内核中断处理程序注册一个回调函数,每当有事件发生时就通过回调函数。把这些文件描述符放到事先准备好的用来存储就绪事件的链表中,调用epoll_wait时,会把准备就绪的socket拷贝到用户态内存,然后清空准备就绪list链表,最后检查这些socket,在LT模式下,如果这些socket上确实有未处理的事件时,该句柄会再次被放回到刚刚清空的准备就绪链表,保证所有的事件都得到正确的处理,而ET模式不会。如果到timeout时间后链表中没有数据也立刻返回。

epoll优点:
(1)epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
(2)本身没有最大并发连接的限制,仅受系统中进程能打开的最大文件数目限制;
(3)效率提升:只有活跃的socket才会主动的去调用callback函数;
(4)省去不必要的内存拷贝:epoll通过内核与用户空间mmap同一块内存实现。
epoll缺点:
(1)如果在并发量低,socket都比较活跃的情况下,select就不见得比epoll慢了。
(2)epoll的跨平台性不够用 只能工作在linux下。

参考

链接: epoll原理详解及epoll反应堆模型.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值