Javascript 限制子进程并等待一个进程完成
我设置了一个GET路径,当到达该GET路径时,它将调用我控制器中的一个函数。这个函数的计算时间很长,所以我把它分成了两部分。如果不进行分岔,该过程大约需要15秒,如果客户端进行呼叫,则其他呼叫将被阻止15秒,直到完成,然后第一个呼叫的呼叫将得到帮助。长计算的最大数量不能超过3个叉。如果有3个以上的fork,我希望客户机等待fork完成 我已经测试了一个if语句,它允许用户睡眠,但是如果另一个调用在正确的时间出现,那么正在睡眠的用户必须等待更长的时间,我还设置了一个while循环,但最终内存耗尽。我就是不能把我的头绕过去。感谢您的帮助Javascript 限制子进程并等待一个进程完成,javascript,node.js,Javascript,Node.js,我设置了一个GET路径,当到达该GET路径时,它将调用我控制器中的一个函数。这个函数的计算时间很长,所以我把它分成了两部分。如果不进行分岔,该过程大约需要15秒,如果客户端进行呼叫,则其他呼叫将被阻止15秒,直到完成,然后第一个呼叫的呼叫将得到帮助。长计算的最大数量不能超过3个叉。如果有3个以上的fork,我希望客户机等待fork完成 我已经测试了一个if语句,它允许用户睡眠,但是如果另一个调用在正确的时间出现,那么正在睡眠的用户必须等待更长的时间,我还设置了一个while循环,但最终内存耗尽。
app.route('/calculation')
.get(todoList.calculation);
一旦点击
while
循环,程序就会陷入无限循环。事件循环永远不会被预先设置,程序也永远不会有机会屈服于分叉的回调。一旦点击while
循环,程序就会陷入无限循环。事件循环永远不会被预先设置,程序也永远不会有机会屈服于分叉的回调。
exports.calculation = [
check('parameter')
.isHexadecimal(),
async function(req, res, next) { /* the rest of the existing function */
const errors = validationResult(req)
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() })
}
while(numRunning == 3){
}
try {
const forked = fork('server/forked-longComputation.js');
++numRunning;
var test = req.query.calculation;
forked.send(test);
forked.on('message', (sum) => {
console.log('sent sum to client');
--numRunning;
forked.kill();
res.json(sum);
});
} catch (err) {
--numRunning;
console.log('Err');
res.json({ error: err.message || err.toString() });
}
}
];