从Linux源码角度看Epoll,透过现象看本质
💡
原文中文,约15700字,阅读约需38分钟。
📝
内容提要
epoll是一种高效的文件描述符监听机制,相比于select和poll系统调用,epoll在性能上有所提升。epoll通过一次性将所有文件描述符传入内核,然后等待事件发生,避免了重复拷贝的过程。在等待事件发生时,通过唤醒回调机制将产生事件的文件描述符放入一个链表中,然后返回这个链表上的文件描述符。epoll还实现了自己独特的文件系统事件轮询机制。
🎯
关键要点
- epoll是一种高效的文件描述符监听机制,性能优于select和poll。
- epoll通过一次性将所有文件描述符传入内核,避免了重复拷贝的过程。
- 在等待事件时,epoll使用唤醒回调机制,将产生事件的文件描述符放入链表中。
- epoll实现了独特的文件系统事件轮询机制。
- epoll初始化时会进行数据结构的初始化,包括锁机制和内存分配。
- epoll在内核中维护两个主要数据结构:eventpoll和epitem。
- epoll_create函数用于创建每个eventpoll实例。
- epoll_ctl函数用于添加、修改或删除文件描述符的监听。
- epoll_wait函数用于等待事件的发生,并返回就绪的文件描述符。
- ep_poll函数在epoll_wait中被调用,用于处理事件的轮询和唤醒机制。
➡️