关于epoll如何工作的一般解释?

时间:2012-12-12 17:48:52

标签: python rabbitmq file-descriptor epoll

我正在进行技术报告,从数据库轮询(通过同步存储过程调用)切换到消息队列(通过pub / sub)。我希望能够解释如何轮询数据库与设置与AMQP代理的连接和配置消息处理程序的方式有很大的不同和重要性。

有人可以在这里提供解释,或者指出一个关于epoll在通知插槽上可用新数据时如何工作的高级教程?

1 个答案:

答案 0 :(得分:5)

我假设“epoll是如何工作的”你指的是从用户的角度来看它是如何工作的(例如,你的代码如何被通知,并应该处理它),而不是内核的观点(如,如何实施epoll)。

简短版本非常简单:它就像poll,除了两件事:

  1. 它使用不透明数据结构的句柄,因此您不会在内核边界上来回传递尽可能多的数据。
  2. 它有poll没有的选项(特别是边缘触发和一次性通知),可以让你在某些情况下编写更有效的代码。
  3. (还有一个事实是它只能在linux上工作.BSD和相关系统有kqueue,这是获得一些相同优势的一种截然不同的方式,Solaris有/dev/poll等,以及一些* nixes没有任何等价物。所以如果你想编写可移植代码,你要么必须使用poll,要么使用像libevent这样的更高级别的库,或者编写等效的libevent你自己。)

    如果您已经了解selectpoll,则其参考中链接的the Wikipedia articlethe blog post应该在它们之间告诉您几乎所有需要知道的内容,以及man page将填补任何空白。

    如果没有,请先了解poll,然后才能了解epoll的不同之处。

    我仍然不确定这与你的主要问题有什么关系。您可以在数据库文件上epoll inotify,或者在消息传递系统的基础上pipesocket,或者在可以表示为文件描述符的任何其他内容中。 linux,所以我不确定理解epoll如何帮助你解释轮询数据库与轮询消息队列之间的区别。当然,两者之间存在巨大差异,但事件触发机制不是其中之一。