我正在写一篇关于从数据库轮询(通过同步存储过程调用)切换到消息队列(通过pub/sub)的技术文章。我想解释一下,轮询数据库与建立与amqp代理的连接和配置消息处理程序相比,有多么的不同和沉重。
有人可以在这里提供一个解释,或者给我一个很好的高级教程,告诉我在socket上出现新数据时epoll是如何工作的?

最佳答案

我假设“epoll是如何工作的”,你指的是从用户的角度(比如,你的代码是如何得到通知的,应该如何处理它),而不是从内核的角度(比如,epoll是如何实现的)。
简短的版本非常简单:它就像poll,除了两件事:
它使用一个不透明数据结构的句柄,这样就不会在内核边界来回传递那么多数据。
它有poll没有的选项(特别是边缘触发和一次性通知),可以让您在某些情况下编写更高效的代码。
(还有一个事实,它只在Linux上工作。bsd和相关系统具有kqueue,这是获得某些相同优点的显著不同的方式,solaris具有/dev/poll,等等,而有些*nix没有等价物。因此,如果要编写可移植代码,您要么使用poll,要么使用一些更高级别的库,比如libevent,要么自己编写等效的libevent。)
如果您已经理解了selectpoll,那么它的引用中链接的the Wikipedia articlethe blog post应该在它们之间告诉您几乎所有您需要知道的信息,而man page将填补任何空白。
如果不是,那么先去了解一下poll,只有这样才能理解epoll是如何不同的。
我仍然不确定这和你的主要问题有什么关系。您可以在数据库文件上epoll一个inotify或消息传递系统的pipesocket底层,或者在linux中可以表示为文件描述符的任何东西,所以我不确定理解epoll将如何帮助您解释轮询数据库与轮询消息队列之间的区别。当然两者之间有着巨大的差异,但事件触发机制并不是其中之一。

关于python - 关于epoll工作原理的一般说明?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13845634/

10-12 21:47