epoll的工作原理概述?

7
我正在撰写一篇关于从数据库轮询(通过同步存储过程调用)转换到消息队列(通过发布/订阅)的技术文章。我希望能够解释轮询数据库与设置连接到AMQP代理并配置消息处理程序有何不同,以及轮询数据库比后者更加繁重。是否有人可以在这里提供解释,或指向一个关于epoll如何在通知套接字上可用新数据的高级教程?

1
你读过 http://en.wikipedia.org/wiki/Epoll 或者 http://www.kernel.org/doc/man-pages/online/pages/man4/epoll.4.html 吗?这两个链接都有一般的解释。另外,我不确定解释 epoll 如何帮助解释你正在讨论的差异。你可以在数据库文件上的inotify上使用 epoll,或者你可以在消息系统下面的队列上使用 epoll,那么你的目标是什么? - abarnert
抱歉,我不小心过早地发布了问题。我已经更新了它。这样清楚了吗? - bitcycle
1个回答

8
我假设你所说的“epoll的工作原理”是指从用户角度来看它是如何工作的(例如,你的代码如何得到通知并处理),而不是内核角度(例如,epoll的实现方式)。简单来说,它与poll非常相似,但有两个区别:
1. 它使用对不透明数据结构的句柄,因此你不需要在内核边界传递大量数据。 2. 它具有poll没有的选项(特别是边缘触发和一次性通知),可以让你在某些情况下编写更有效率的代码。
(还有一个事实,它只在Linux上运行。BSD和相关系统有kqueue,这是一种显著不同的方式来获得类似的优势,Solaris有/dev/poll等等,而一些*nixes没有等效物。因此,如果你想编写可移植的代码,你要么使用poll,要么使用一些高级库,如libevent,或者自己编写libevent的等效物。)
如果您已经了解selectpoll,那么参考资料中链接的维基百科文章博客文章几乎可以告诉您所需了解的一切内容,手册页将填补任何空白。
如果没有,请先学习poll,然后再学习epoll的不同之处。
我仍然不确定这与您的主要问题有何关联。在Linux中,您可以使用epoll对数据库文件、底层消息系统的pipesocket,以及几乎任何可以表示为文件描述符的内容进行监视。因此,我不确定了解epoll将如何帮助您解释轮询数据库与轮询消息队列之间的差异。当然,这两者之间存在巨大的差异,但事件触发机制并不是其中之一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接