linux epoll的实现原理

Posted phoenix tree

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux epoll的实现原理相关的知识,希望对你有一定的参考价值。

1 linux的poll操作

linux文件的poll操作有两个主要目的:第一,主动查看该文件上是否有读写事件;第二,提供操作waitqueue的接口给epoll等上层接口使用,比如epoll可以通过直接调用其所监视的文件的poll操作来注册自己的回调到该文件的waitqueue中,所谓的回调就是waitqueue entry中的function,这样的话,当epoll所监视的文件有数据到来的话,注册到waitqueue中的回调就回被调用,然后该文件就可以被放入epoll的rdllist中。

2 ep_item_poll和ep_poll_callback

ep_item_poll中将ep_poll_callback作为waitqueue entry的function注册给所监视的文件的waitqueue。

3 rdllist和ovflist

有读写事件的文件都放在rdllist这个队列中。在用户epoll_wait的时候,需要将rdllist拷贝到用户空间并且加锁,这个时候如果来了新的事件,就先放在ovflist中,在rdllist不忙的时候再放入其中。

4 epoll_create、epoll_ctl和epoll_wait

epoll_create是为当前线程创建一个epoll实体来监视所需要监视的文件,epoll_ctl是往epoll中加入需要监视的文件,epoll_wait是查看是否有事件到来,并且进行相应的处理,因为要一直监视,所以,需要一个死循环不断的进行epoll_wait。

以上是关于linux epoll的实现原理的主要内容,如果未能解决你的问题,请参考以下文章

epoll底层原理总结

Linux内核笔记:epoll实现原理

图文详解 epoll 原理Redis,Netty,Nginx实现高性能IO的核心原理epoll 详解

linux epoll的实现原理

Epoll的本质(内部实现原理)

Linux内核笔记:epoll实现原理