Sat*_*iya 3 multithreading multicore node.js
“Node.js 仅限于单线程”。当我们在多核系统中部署时,nodeJS 将如何反应?它会提高性能吗?
Node.js V8 引擎中运行的 JavaScript 是单线程的,但底层的 libuv 多平台支持库是多线程的,这些线程将由操作系统根据其调度算法分布在 CPU 核心上,因此即使您的 JavaScript 应用程序在顶层异步(且单线程)运行,您仍然可以从幕后的多核中受益。
正如其他人所提到的,Node.js 集群模块是在应用程序 (JavaScript V8) 级别利用多核并发性的绝佳方法,并且由于 Express 具有集群感知能力,因此您可以让多个工作进程执行并发服务器逻辑,而无需每个进程需要一个唯一的监听端口。感人的。
正如其他人所提到的,您将需要 Redis 或同等产品来在集群工作进程之间共享数据。您还需要一个支持集群的日志记录工具,以便集群主进程和所有工作进程可以将日志记录到单个共享日志文件中。Node log4node 模块在这里是一个不错的选择,它与 logrotate 一起使用。
典型的 Web 示例显示使用运行时检测到的核心数量作为要分叉的集群工作进程的数量,但我更喜欢将其作为 config.yaml 文件中的配置选项,以便我可以调整运行主 JavaScript 应用程序的工作进程数量如所须。