Multithreading Node.js是单线程的,这是否意味着我们不能在不同的线程中运行多个Node.js?
我在一篇文章中读到Node.js是单线程的。问题是如果我们在不同的端口上运行多个Node.js文件会怎么样?它们是否有自己的线程,或者所有线程都将位于main Node.js线程下? 有人能告诉我这个问题吗?我现在处于黑暗面。 节点的单个实例在单个线程中运行。为了利用多核系统,用户有时需要启动一组节点进程来处理负载 群集模块允许您轻松创建所有共享服务器端口的子进程Multithreading Node.js是单线程的,这是否意味着我们不能在不同的线程中运行多个Node.js?,multithreading,node.js,Multithreading,Node.js,我在一篇文章中读到Node.js是单线程的。问题是如果我们在不同的端口上运行多个Node.js文件会怎么样?它们是否有自己的线程,或者所有线程都将位于main Node.js线程下? 有人能告诉我这个问题吗?我现在处于黑暗面。 节点的单个实例在单个线程中运行。为了利用多核系统,用户有时需要启动一组节点进程来处理负载 群集模块允许您轻松创建所有共享服务器端口的子进程 var cluster = require('cluster'); var http = require('http'); var
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);
}
var cluster=require('cluster');
var http=require('http');
var numpus=require('os').cpus().length;
if(cluster.isMaster){
//叉工。
对于(变量i=0;i
这意味着您必须自行构建,因此,如果您想在不同线程中侦听不同的端口,可以使用集群
或子进程
节点的单个实例在单个线程中运行。为了利用多核系统,用户有时需要启动一组节点进程来处理负载
群集模块允许您轻松创建所有共享服务器端口的子进程
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);
}
var cluster=require('cluster');
var http=require('http');
var numpus=require('os').cpus().length;
if(cluster.isMaster){
//叉工。
对于(变量i=0;i
这意味着您必须自行构建,因此如果您想在不同线程中侦听不同的端口,可以使用集群
或子进程
问题是如果我们在不同的端口上运行多个Node.js文件会怎么样?它们是否有自己的线程,或者所有线程都将位于main Node.js线程下
从您的问题来看,我觉得您实际上启动了Node.js的多个进程。在这些情况下,它们将像系统上的任何其他多进程集一样工作,并且您的操作系统将尝试在所有内核和/或CPU之间平衡负载
我在一篇文章中读到Node.js是单线程的
这有点复杂。虽然Node.js使用的V8 JavaScript引擎在一个线程中运行JavaScript,但Node.js库中的许多库调用本机代码,这些代码可以使用任意多个线程。Node.js的这些内部组件使用线程池和多线程处理磁盘和网络IO以及其他任务
Node.js真正引人注目的应用程序是那些典型的IO绑定应用程序。在这些情况下,您可以从多线程中获得很多好处,而无需为此编写任何代码。例如,当您向disk Node发出多个请求时,js将使用多个线程来处理该数据的缓冲和管理,同时不会阻塞主JavaScript线程
在我的许多应用程序中,我发现我可以充分利用8核机箱,而无需编写任何代码来启动子进程。节点的内部多线程为我完成了所有工作。您的里程数因应用而异
我对过去的一个问题做了不同的解释,你可能会觉得有帮助:
问题是如果我们在不同的端口上运行多个Node.js文件会怎么样?它们是否有自己的线程,或者所有线程都将位于main Node.js线程下
从您的问题来看,我觉得您实际上启动了Node.js的多个进程。在这些情况下,它们将像系统上的任何其他多进程集一样工作,并且您的操作系统将尝试在所有内核和/或CPU之间平衡负载
我在一篇文章中读到Node.js是单线程的
这有点复杂。虽然Node.js使用的V8 JavaScript引擎在一个线程中运行JavaScript,但Node.js库中的许多库调用本机代码,这些代码可以使用任意多个线程。Node.js的这些内部组件使用线程池和多线程处理磁盘和网络IO以及其他任务
Node.js真正引人注目的应用程序是那些典型的IO绑定应用程序。在这些情况下,您可以从多线程中获得很多好处,而无需为此编写任何代码。例如,当您向disk Node发出多个请求时,js将使用多个线程来处理该数据的缓冲和管理,同时不会阻塞主JavaScript线程
在我的许多应用程序中,我发现我可以充分利用8核机箱,而无需编写任何代码来启动子进程。节点的内部多线程为我完成了所有工作。您的里程数因应用而异
我对过去的一个问题做了不同的解释,你可能会发现这个问题很有帮助:@phpGeek请看,答案与使用多核处理器有关,通过分岔进程。因此,这里不涉及线程。基本上,您不能在Node.js中创建线程。但在这篇文章中,TruongSinh的回答解释了如何通过从
主进程
分叉子进程
来利用多核。对于端口,它在他的回答中子进程共享服务器端口@phpGeek if