在Node.js应用程序中处理CPU密集型计算

我有一个Node.js Web应用程序,我需要在大型matrix上执行一些繁重的计算。 由于Node.js是事件驱动的,我预计这会导致我的web应用程序性能不佳。 用Node处理CPU繁重任务的最好方法是什么?

我可以将计算卸载到另一个类似Python的服务器吗?

你在这种情况下真正想做的是一个插件

在Node.js文档中描述的插件是dynamic链接的共享对象。 他们可以为C和C ++库提供粘合剂。

因此,无论V8function多么强大,您都可以使用较低级的语言( C / C ++ )编写繁重的计算,并且比使用JavaScript更有效。

阅读关于如何使用Addons的文档,我相信你会发现它是NodeJS的一个奇妙function。

是的 – 你可以卸载到另一台服务器。 只需使用您的常规请求方法来发布您需要“计算”的数据。 由于请求是asynchronous的,它不会阻塞正常的节点stream。 当请求返回时,您已经获得了所需的数据,并可以在将其提交给客户端之前进行任何最后的修改。

然后,您可以有一个“服务器场”来处理这些事情 – 例如在EC2上,您可以创build一个负载平衡器,然后让节点向该平衡器发出请求。 不需要在节点内部做任何事情,比如记住哪个服务器是最后一个命中或者类似的东西。

另外,如果这更像是一个命令行事物,并且不需要非常可扩展,那么可以使用节点的exec来进行系统调用,然后再次调用callback函数,而不pipe返回的是什么。

无论你做什么,都不要在节点内进行这些计算:) – 你的预期是正确的。 它会炸弹你的performance,因为我经历了几次艰难的学习。 asynchronous是你的朋友。