在MultiCore系统中的NodeJS

“Node.js仅限于单个线程”。 当我们在多核系统中进行部署时nodeJS会如何反应? 它会提升性能吗?

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

正如其他人所提到的那样,Node.js集群模块是在应用程序(JavaScript V8)级别利用多核并发性的绝佳方法,而且由于Express可以集群感知,因此可以让多个工作进程执行并发服务器逻辑每个进程都需要一个独特的侦听端口。 令人印象深刻。

正如其他人所提到的那样,您将需要Redis或同等机制来在群集工作者进程之间共享数据。 您还需要一个能够识别群集的日志logging工具,以便群集主服务器和所有工作进程可以login到一个共享的日志文件。 Node log4node模块是一个很好的select,它可以和logrotate一起使用。

典型的Web示例显示了使用运行时检测到的内核数量作为要派生的集群工作进程的数量,但是我更愿意在config.yaml文件中创build一个configuration选项,以便调整运行主JavaScript应用程序的工作进程的数量如所须。

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

例如,如果您是构buildWeb服务器,则可以将每个请求路由到一个nodejs进程。

编辑:正如hereandnow78和vkurchatkin所build议的,也许使用多核系统的最佳方式是使用nodejs集群模块

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