Node.js是单线程这是否意味着我们不能在不同的线程中运行多个Node.js?

我读过一篇文章,说Node.js是单线程的。 问题是如果我们在不同的端口上运行多个Node.js文件? 他们有自己的线程,或者他们都将在主Node.js线程? 有人可以在这个问题上解释一下我现在在黑暗的一面。

http://nodejs.org/api/cluster.html

节点的单个实例在单个线程中运行。 为了利用多核系统,用户有时需要启动一个Node进程集群来处理负载。

群集模块允许您轻松创build全部共享服务器端口的subprocess。

var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { // Workers can share any TCP connection // In this case its a HTTP server http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); } 

这意味着你必须构build自己,所以如果你想听不同的线程不同的端口,使用clusterchild_process

问题是如果我们在不同的端口上运行多个Node.js文件? 他们有自己的线程,或者所有的线程都在主Node.js线程下?

从你的问题,这听起来像你实际上启动Node.js的多个进程。 在这种情况下,它们将像系统上的任何其他多个进程一样工作,并且您的操作系统将尝试平衡所有内核和/或CPU之间的负载。

我读过一篇文章,说Node.js是单线程的。

这有点复杂。 尽pipeNode.js使用的V8 JavaScript引擎在单个线程中运行JavaScript,但大部分Node.js库会调用本地代码,而本地代码可以使用尽可能多的线程。 这些Node.js的内部使用线程池和multithreading来处理磁盘和networkingIO,以及其他任务。

Node.js真正照亮的应用程序通常是IO绑定的应用程序。 在这些情况下,您可以获得multithreading的许多好处,而无需为其编写任何代码。 例如,当您向磁盘发出多个请求时,Node.js将使用多个线程来处理数据的缓冲和pipe理,而不会阻塞您的主JavaScript线程。

在我的许多应用程序中,我发现我可以充分利用一个8核心的盒子,而无需编写任何代码来启动subprocess。 Node的内部multithreading为我做了所有的工作。 您的里程将因应用程序而异。

我已经写了一个不同的解释你可能会发现有帮助的以前的问题: https : //stackoverflow.com/a/19324665/362536