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

问题描述 投票:5回答:1

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

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

python rabbitmq file-descriptor epoll
1个回答
5
投票

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

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

  1. 它使用不透明数据结构的句柄,因此您不会在内核边界上来回传递尽可能多的数据。
  2. 它有poll没有的选项(特别是边缘触发和一次性通知),可以让你在某些情况下编写更有效的代码。

(还有一个事实是它只适用于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将帮助你解释轮询数据库与轮询消息队列之间的差异。当然,两者之间存在巨大差异,但事件触发机制不是其中之一。

© www.soinside.com 2019 - 2024. All rights reserved.