我正在进行关于从数据库轮询(通过同步存储过程调用)切换到消息队列(通过pub / sub)的技术报告。我希望能够解释如何轮询数据库与设置与AMQP代理的连接和配置消息处理程序的方式有很大的不同和重要性。
有人可以在这里提供一个解释,或者指出一个关于epoll在通知套接字上可用的新数据时如何工作的高级教程?
我假设“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
将帮助你解释轮询数据库与轮询消息队列之间的差异。当然,两者之间存在巨大差异,但事件触发机制不是其中之一。