我正在进行技术报告,从数据库轮询(通过同步存储过程调用)切换到消息队列(通过pub / sub)。我希望能够解释如何轮询数据库与设置与AMQP代理的连接和配置消息处理程序的方式有很大的不同和重要性。
有人可以在这里提供解释,或者指出一个关于epoll在通知插槽上可用新数据时如何工作的高级教程?
答案 0 :(得分:5)
我假设“epoll是如何工作的”你指的是从用户的角度来看它是如何工作的(例如,你的代码如何被通知,并应该处理它),而不是内核的观点(如,如何实施epoll)。
简短版本非常简单:它就像poll
,除了两件事:
poll
没有的选项(特别是边缘触发和一次性通知),可以让你在某些情况下编写更有效的代码。(还有一个事实是它只能在linux上工作.BSD和相关系统有kqueue
,这是获得一些相同优势的一种截然不同的方式,Solaris有/dev/poll
等,以及一些* nixes没有任何等价物。所以如果你想编写可移植代码,你要么必须使用poll
,要么使用像libevent
这样的更高级别的库,或者编写等效的libevent
你自己。)
如果您已经了解select
和poll
,则其参考中链接的the Wikipedia article和the blog post应该在它们之间告诉您几乎所有需要知道的内容,以及man page将填补任何空白。
如果没有,请先了解poll
,然后才能了解epoll
的不同之处。
我仍然不确定这与你的主要问题有什么关系。您可以在数据库文件上epoll
inotify
,或者在消息传递系统的基础上pipe
或socket
,或者在可以表示为文件描述符的任何其他内容中。 linux,所以我不确定理解epoll
如何帮助你解释轮询数据库与轮询消息队列之间的区别。当然,两者之间存在巨大差异,但事件触发机制不是其中之一。