gpt4 book ai didi

node.js - Node 始终使用相同的集群

转载 作者:太空宇宙 更新时间:2023-11-04 03:17:48 24 4
gpt4 key购买 nike

我为我的cpu的每个线程创建了一个集群,对于每个请求我等待5秒来响应,并打开chrome的几个选项卡并发出请求,但所有这些请求都由同一个集群处理,并且同步地,在第一个请求保持5秒后开始处理第二个请求,依此类推。

const cluster = require('cluster')
const numCPUs = require('os').cpus().length;

if(cluster.isMaster) {

for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}

cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died with code: ${code}, and
signal: ${signal}`);
console.log('Starting a new worker');
cluster.fork();
});

} else {

const express = require('express')
const app = express();

app.get('/', (req, res) => {
setTimeout(()=>{
console.log('worker response id: ' + cluster.worker.id)
res.status(200).end()
}, 5000)
})
app.listen(3000, ()=> console.log('Listening with worker',
cluster.worker.id))

}

enter image description here

@Edit ---- 建议后的代码 ------

它现在可以工作,但只有两次,你如何在图像上看到,其他时候该过程是同步的,仅使用一个集群,只有一次使用其他集群,我如何更好地控制它?

const cluster = require('cluster')
const numCPUs = require('os').cpus().length;

if(cluster.isMaster) {

for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}

cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died with code: ${code}, and
signal: ${signal}`);
console.log('Starting a new worker');
cluster.fork();
});

} else {

const express = require('express')
const app = express();

function sleepSync(ms) {
let targetTime = Date.now() + ms;
while (Date.now() < targetTime);
}

app.get('/', (req, res) => {
sleepSync(5000)
console.log('worker response id: ' + cluster.worker.id)
res.status(200).end()
})
app.listen(3000, ()=> console.log('Listening with worker', cluster.worker.id))

}

enter image description here

最佳答案

执行setTimeout需要几微秒的时间。超时并不是忙碌的等待。在您的工作人员等待的时间里,它可以免费用于其他任务。因此它将占用额外的请求,直到连续 5 秒用完为止。这是通过 Node 的 Event Loop 实现的.

更原始的服务器实现也使用这种技术来实现并行性的概念。

为了看到差异,请尝试创建一个繁忙等待(可能如下所示),并使用它代替 setTimeout

function sleepSync(ms) {
let targetTime = Date.now() + ms;
while (Date.now() < targetTime);
}

关于node.js - Node 始终使用相同的集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53995373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com