将node.js用于任务队列工作者而不是其他语言的任何优势?

时间:2013-05-09 07:31:06

标签: php python ruby node.js redis

我是否可以将Node.js用于任务队列工作器而不是任何其他语言,例如PHP / Python / Ruby?

我想学习Redis的简单任务队列任务,比如发送大量的电子邮件,不想让用户等待建立连接等。

所以问题是:node.js的异步性质在这种情况下有用还是无用?

P.S。我知道由于有效的V8引擎,节点在内存消耗和计算方面比任何一种语言都快,也许它可以在这个领域获胜?

2 个答案:

答案 0 :(得分:1)

这取决于您所熟悉的内容,以及哪种语言为您尝试执行的工作提供支持。例如,如果您正在渲染PDF文件,那么您认为哪种语言具有最佳的PDF库?

由于工作分散到多个工作人员的方式,工作人员可以运行同步的阻塞代码。拥有异步工作只意味着每个工作进程在理论上可以比单线程阻塞等效工作做更多的工作。

在具有线程支持的语言中,这种优势很小。 Python和Ruby都支持线程,这是一种并行运行多个同步代码块的方法。

a high volume email application构建分布式工作队列时,我使用EventMachine库在异步非阻塞Ruby中实现了大部分队列。 Redis被用作后备存储以确保幂等性。

编写正确的异步,事件驱动代码一直是一项挑战,因为您需要确保所有库都是非阻塞的,否则可能导致工作进程被阻塞。这与在执行线程时查找线程安全的库没有什么不同。

Node可以很好地做很多事情,但线程不是其中之一。好消息是,大多数Node库默认是非阻塞的,因此兼容性不那么重要。对于大多数Python和Ruby库来说,情况并非相同,但其中大多数至少是线程安全的。

最终取决于你最舒服的东西。分布式工作器系统可以涉及多种不同的语言,因此您不一定会被锁定到任何特定的语言。

答案 1 :(得分:0)

我已将Node.js用于任务工作者,用于调用用PHP编写的可运行网页或在某些主机上运行命令的作业。在这两个实例中,Node只是初始化(触发)作业,等待然后评估结果。繁重/ CPU密集型工作由另一个系统/程序完成。

希望这有帮助!