MultiCore系统中的NodeJS

时间:2014-02-28 13:07:07

标签: multithreading node.js multicore

“Node.js仅限于一个线程”。当我们在多核系统中部署时,nodeJS将如何反应?它会提升表现吗?

3 个答案:

答案 0 :(得分:2)

Nodejs在一个线程中运行,但您可以启动多个nodejs进程。

例如,如果您正在构建Web服务器,则可以将每个请求路由到其中一个nodejs进程。

编辑:正如hereandnow78和vkurchatkin建议的那样,使用多核系统能力的最佳方式可能是使用nodejs cluster module

答案 1 :(得分:2)

Node.js V8引擎中运行的JavaScript是单线程的,但底层的libuv多平台支持库是多线程的,并且这些线程将由操作系统根据其调度算法分布在CPU核心上,因此,如果您的JavaScript应用程序在顶层异步运行(和单线程),您仍然可以从多核内部受益。

正如其他人所提到的,Node.js Cluster模块是在应用程序(JavaScript V8)级别利用多核实现并发的绝佳方式,并且由于Express可识别群集,因此您可以让多个工作进程执行并发服务器逻辑,不需要为每个进程提供唯一的侦听端口。令人印象深刻的。

正如其他人所提到的,您将需要Redis或同等产品来在集群工作进程之间共享数据。您还需要一个支持群集的日志记录工具,因此集群主服务器和所有工作进程可以记录到单个共享日志文件。 Node log4node模块在这里是个不错的选择,它适用于logrotate。

典型的Web示例显示使用运行时检测到的内核数量作为fork的集群工作进程数,但我更喜欢在config.yaml文件中将其作为配置选项,以便我可以调整运行该数据库的工作进程数。根据需要使用主要的JavaScript应用程序。

答案 2 :(得分:1)

集群模块就是解决方案。 但你需要知道,node.js集群是,它调用子进程。这意味着每个进程都无法共享数据。 要共享数据,您需要使用Redis或其他IMDG在群集节点之间共享数据。