jun*_*nxi 7 operating-system v8 node.js express
我知道这可能是个愚蠢的问题。我不擅长操作系统知识。
通常我们 fork 的集群/进程的数量是 CPU 核心数,就像Nodejs 官方文档显示一样。
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
Run Code Online (Sandbox Code Playgroud)
但是我很困惑,如果我们分叉集群的数量超过 CPU 内核的数量,会发生什么?
是经验值、最佳实践还是任何其他原因?
但我很困惑,如果我们分叉集群的数量超过 CPU 核心的数量,会发生什么?
什么都不会发生,一切仍然会工作,但是每个核心放置多个 CPU 密集型线程或进程不会使应用程序变得更快 - 如果有的话,它可能只会变得更慢,因为核心会浪费一部分时间上下文在线程之间切换。
如果您有 CPU 密集型操作,则每个核心的最佳线程/进程数始终为 1。对于 I/O 密集型操作,这并不重要,因为大多数时候进程不会执行任何计算。
| 归档时间: |
|
| 查看次数: |
1008 次 |
| 最近记录: |