据我了解,NodeJS 的好处之一是每个进程一个线程;在标准情况下,您无需担心并发性。
我还阅读了关于多核机器上的 NodeJS 缩放(多核机器上的 Node.js):
工作人员将竞争接受新的连接,负载最少的进程最有可能获胜。它工作得很好,并且可以在多核机器上很好地扩展吞吐量。
在这种情况下,多个线程会并行执行吗?如果是这样,这是否意味着我们必须编写多线程代码(如果我们想使用多个内核) - 如果是这样,我该怎么做?
或者如果它们不并行执行......多核的提升/好处来自哪里?
编辑:我目前的理解
因此,多个内核上可能有多个进程,但每个进程只有一个线程。
例如:
var io = require('socket.io').listen(81);
var connections = [];
io.sockets.on('connect', function (socket) {
console.log('connected...');
connections.push(socket);
socket.on('disconnect', function () {
console.log('disconnected');
connections.remove(socket);
});
});
没有种族联系;有一个线程,不会有connections
. 当您有不同的进程时,每个进程都有自己的connections
. 因此,如果您有一个庞大的聊天室,您将无法通过多个进程来平衡负载;每个进程都是自己的聊天室。
在这方面,它与 PHP 没有什么不同,因为每个 PHP 脚本都有自己的变量副本,因此您无需编写锁定代码。当然,其余部分完全不同,但据我所知,“你不必编写线程锁定代码”这一论点并没有多大好处,因为无论如何大多数数据都会保存在其他地方(不是作为内存变量)。