libevent 的实现细节是啥?轮询机制的封装?

Posted

技术标签:

【中文标题】libevent 的实现细节是啥?轮询机制的封装?【英文标题】:What is the implementation detail of libevent? An encapsulation of poll mechanism?libevent 的实现细节是什么?轮询机制的封装? 【发布时间】:2016-01-08 02:49:52 【问题描述】:

libevent 由于事件通知和回调函数的支持,为程序员提供了编写异步程序的能力。我不知道 linux 内核是否提供这样的系统调用来在特定事件发生时通知用户空间应用程序。当人们使用非阻塞操作时,他们必须轮询所有文件描述符以检查其中一些是否准备好。但是,我认为 libevent 可能会利用其他一些先进的手段来完成这项任务,例如带有一些未知的系统调用。

那么,1) libevent 如何检查不同事件的状态?通过轮询或其他机制? 2) libevent 在运行时会分叉线程的子进程吗?

【问题讨论】:

Related: PORTABILITY NOTES from libev (NOT libevent) 文档可能也很有趣。 【参考方案1】:

libevent 主页显示(部分),

目前,libevent 支持 /dev/poll、kqueue(2)、event ports、POSIX select(2)、Windows select()、poll(2) 和 epoll(4)。

对于现代 Linux,答案是 epoll

【讨论】:

以上是关于libevent 的实现细节是啥?轮询机制的封装?的主要内容,如果未能解决你的问题,请参考以下文章

Libevent + Comet(长轮询/Http-Stream)

Envoy源码分析之Dispatcher

Envoy源码分析之Dispatcher

如何在linux下实现event事件机制

libev学习笔记

libevent的事件机制