2013-05-09 41 views
2

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

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

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

P.S.由于有效的V8引擎,我知道节点在内存消耗和计算上比任何这种语言都要快,可能有可能在这个领域赢得胜利吗?

回答

1

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

工作人员的优势是能够运行同步,阻止代码,因为工作分散给多个工作人员。拥有异步工作者只是意味着每个工作者进程在理论上可以做的工作要比单线程的阻塞等效物更多。

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

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

由于您需要确保您的所有库都是非阻塞的,否则可能导致工作进程阻塞,因此编写适当的异步事件驱动代码一直颇具挑战性。这与寻找线程安全的库非常相似。

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

最终它取决于你最舒服的。分布式工作人员系统可以包含几种不同的语言,因此您不一定会被锁定到任何特定的语言。

0

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

希望这会有所帮助!

相关问题