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

bit*_*cle 5 python epoll file-descriptor rabbitmq

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

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

aba*_*ert 6

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

简短的版本很简单:就像poll两件事情一样:

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

(还有一个事实是它只适用于Linux.BSD和相关系统有kqueue一种截然不同的方式来获得一些相同的优点,Solaris有/dev/poll等等,而且有些*nixes没有任何等价物.所以如果你想写的话便携式代码,您要么必须使用poll,要么使用某些更高级别的库libevent,或者编写相当于您libevent自己的代码.)

如果您已经理解select并且poll,维基百科文章和其参考文献中链接的博客文章应该在它们之间,告诉您几乎所有您需要知道的内容,并且手册页将填补任何空白.

如果没有,请先了解一下poll,然后才有必要了解它们epoll的不同之处.

我仍然不确定这与你的主要问题有什么关系.你可以epollinotify一个数据库文件,或者一个pipesocket一个邮件系统底层,或其它任何东西可以表示为Linux的文件描述符,所以我不知道怎么理解epoll会帮助你解释轮询数据库之间的差异与轮询消息队列.当然,两者之间存在巨大差异,但事件触发机制不是其中之一.