Javascript 它';是否可以在Node.js中创建一个并行运行的异步函数?
我的目标是并行运行Javascript 它';是否可以在Node.js中创建一个并行运行的异步函数?,javascript,node.js,promise,parallel-processing,Javascript,Node.js,Promise,Parallel Processing,我的目标是并行运行longRunnigTask和quickTask函数: function longRunnigTask() { return new Promise((resolve) => { console.log('longRunnigTask started'); for (let i = 0; i < 999999999; i++) {}; console.log('longRunnigTask ended');
longRunnigTask
和quickTask
函数:
function longRunnigTask() {
return new Promise((resolve) => {
console.log('longRunnigTask started');
for (let i = 0; i < 999999999; i++) {};
console.log('longRunnigTask ended');
resolve();
});
}
function quickTask() {
return new Promise((resolve) => {
console.log('quickTask started');
console.log('quickTask ended');
resolve();
});
}
(function() {
Promise.all([
longRunnigTask(),
quickTask()
]);
})();
但我得到:
longRunnigTask started
longRunnigTask ended
quickTask started
quickTask ended
在没有外部库的情况下实现这一点是可能的,或者我做错了什么?在主长块循环中,您可以像这样做一些超小的暂停
consttimeout=(ms)=>newpromise(resolve=>setTimeout(resolve,ms));
函数longRunnigTask(){
返回新承诺(异步(解析)=>{
log(“longRunnigTask已启动”);
for(设i=0;i<9999999;i++){
如果(i==5555)等待超时(1);
};
log('LongRunnigTaskEnded');
决议(“从长到短的决议”);
});
}
函数quickTask(){
返回新承诺((解决)=>{
log('quickTask start');
console.log('quickTask结束');
解决(“快速回复”);
});
}
(异步()=>{
longRunnigTask().then((res)=>console.log(res));
quickTask()。然后((res)=>console.log(res));
})();代码>这些函数是CPU绑定的还是IO绑定的?如果它们是CPU绑定的(如示例中所示),请使用web worker,如果是IO绑定的,则它们将并行运行。不需要外部库。请参阅-“worker_threads模块允许使用并行执行JavaScript的线程”。本模块自节点10.5开始提供-(讨论内容/原因)。API可以包装成承诺,如第一个链接所示。这不是Node附带的唯一“并行”模块。如果您在这些函数中没有执行任何异步操作,它们将不会并行运行。您可能需要看看web workers。或者,worker\u线程
(见上文)或子进程
——两者都是标准的——或者..仅凭承诺
,“代码”并行性是不可能的(因为它们实际上只是回调的一组指导原则)。但是,承诺
可以包装多个执行上下文的并行性(例如,通过工作线程
支持),并封送回原始上下文。考虑到承诺I/O操作本身是一种并行性的形式,尽管是在I/O操作(而不是执行上下文)上。@ USER 826740检查更新后的答案。当然,您需要在主长期运行中修改逻辑block@Couper现在试试看。当然,worker_线程是一个很酷的选择,但也可以通过这种方式实现
longRunnigTask started
longRunnigTask ended
quickTask started
quickTask ended