使用node.js作为任务队列工作器而不是其他语言的任何优势


Any advantage of using node.js for task queue worker instead of other languages?

我是否有使用Node.js作为任务队列工作器而不是任何其他语言(如PHP/Python/Ruby)的任何优势?

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

所以问题是:在这种情况下,node.js的异步性质是否有帮助,或者它是无用的?

注:我知道node在内存消耗和计算方面比任何一种语言都快,因为它有高效的V8引擎,也许有可能在这个领域获胜?

这实际上取决于您熟悉什么,以及哪种语言为您尝试执行的工作提供支持。例如,如果您要呈现PDF文件,在您熟悉的语言中,哪种语言有最好的PDF库?

worker的优点是能够同步运行阻塞代码,因为工作被分散到多个worker上。异步工作进程意味着每个工作进程理论上可以比单线程阻塞进程做更多的工作。

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

当为一个大容量的电子邮件应用程序构建一个分布式工作队列时,我用异步非阻塞Ruby和EventMachine库实现了它的大部分。Redis被用作后备存储,以确保幂等性。

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

Node可以很好地完成很多事情,但线程不是其中之一。好消息是,大多数Node库在默认情况下是非阻塞的,因此兼容性不太需要考虑。对于大多数Python和Ruby库来说就不是这样了,但它们中的大多数至少是线程安全的。

最后,这取决于你对什么感觉最舒服。分布式工作系统可以包含几种不同的语言,因此您不必被锁定在任何特定的语言中。

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

希望这对你有帮助!