当我在服务器端收到“on”事件时,我想并行启动一个任务,因此它不会阻止当前的事件循环线程。有可能这样做吗?怎么样?
我不想阻止服务器端循环,我希望能够在任务完成后向客户端发回消息,例如:
client.on('execute-parallel-task', function(msg) {
setTimeout(function() {
// do something that takes a while
client.emit('finished-that-task');
},0);
// this block should return asap, not waiting for the previous call
});
我不确定setTimeout是否可以完成这项工作。
答案 0 :(得分:2)
这取决于需要一段时间。如果它需要一段时间异步(你可以告诉,因为你必须注册一个回调或complete
处理程序),并且需要一段时间因为它被阻止了像IO这样的东西,而不是CPU绑定,它本身就是 parallel 。
但是,如果它是setTimeout
或{{1}的处理程序,那么您可以使用setImmediate
,setTimeout
等立即发回消息。执行时,你的单个执行线程将被卡住处理;你不是真的修复问题,只是推迟了。
要展示真正的并行行为,您需要启动child process。您可以使用消息传递功能通知您的工作人员要做什么工作,并在工作完成后通知父进程。
setImmediate
然后在var cp = require('child_process');
var child = cp.fork(__dirname + '/my-child-worker.js');
n.on('message', function(m) {
if (m === "done") {
// Whey!
}
});
n.send(/* Job id, or something */);
;
my-child-worker.js
答案 1 :(得分:1)