任何队列工作者使用node.js而不是其他语言的好处?

我有任何使用Node.js的任务队列工人,而不是任何其他语言,如PHP / Python / Ruby的优势吗?

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

所以问题是:node.js的asynchronous性质在这种情况下有帮助还是没用?

PS我知道节点比任何这种语言在内存消耗和计算上都要快,因为有效的V8引擎,也许有可能赢得这个领域?

这实际上取决于您熟悉的内容,以及哪种语言为您尝试执行的工作提供了支持。 例如,如果您正在渲染PDF文件,那么您最喜欢的语言就是PDF文件了?

由于工作是分散给多个工作人员的,因此工人可以运行同步,阻止代码。 拥有asynchronous工作者只是意味着每个工作进程在理论上可以比单线程的阻塞等价物做更多的工作。

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

在为大量电子邮件应用程序构build分布式工作队列时,我使用EventMachine库在asynchronous非阻塞Ruby中实现了大部分工作。 Redis被用作后援存储以确保幂等性。

编写适当的asynchronous,事件驱动的代码一直是一个挑战,因为你需要确保你所有的库都是非阻塞的,否则你可能会导致工作进程阻塞。 这与寻找线程安全的库非常相似。

节点可以做很多事情,但是线程不是其中之一。 好消息是,大多数Node库默认情况下是非阻塞的,所以兼容性不是问题。 对于大多数Python和Ruby库来说,这是不可能的,但是其中大部分都是线程安全的。

最后,这取决于你最舒服的。 一个分布式的工作系统可以有几种不同的语言,所以你不一定会被locking到任何特定的语言。

我已经使用Node.js为任务工作者调用了以PHP编写的可运行网页或在特定主机上运行命令的作业。 在这两种情况下,Node都只是初始化(触发)作业,等待然后评估结果。 繁重的工作是由另一个系统/程序完成的。

希望这可以帮助!