实现另一个线程/进程读取队列的最有效方法是什么?
我正在考虑使用一个基本的MySQL表来调查睡眠。这听起来是最具扩展性的(它甚至不必在同一台服务器上),但可能会导致对DB的查询过多。
答案 0 :(得分:3)
您有多种选择,这实际上取决于您尝试让系统执行的操作。
答案 1 :(得分:2)
这是根据您的具体规格自行编写的简单内容之一。我在这里写了一个玩具:
http://github.com/jrockway/app-queue
我不确定它是否会再编译,因为AnyEvent :: Subprocess自写完以来发生了重大变化。但你可以窃取这些想法。
基本上,我认为RPC风格的基础设施是最好的。您有一个处理保持数据的服务器。然后客户端通过RPC调用连接并添加数据或删除数据。这为您提供了语义的最大灵活性。你可以是“事务性的”,这样如果客户端获取数据然后从不说“嘿,我完成了它”,你可以假设客户端已经死亡并将工作交给另一个客户端。您还可以确保每个作业只运行一次。
无论如何,使用关系数据库表使队列工作需要花费一些精力。你应该使用KiokuDB来表示持久性。 (如果需要,您可以将数据物理存储在MySQL中,但这为此提供了更好的Perl API。)
答案 2 :(得分:2)
在PostgreSQL中你可以使用NOTIFY / LISTEN组合,在运行LISTEN之后只需要等待PG连接套接字。