我需要组织函数Func1
和Func2
的并发竞争过程,并在解决最快的函数时解析main。
const Promise = require('bluebird')
const Func1 = require('./functions/func1')
const Func2 = require('./functions/func2')
let functions = [
Func1(25),
Func2(40)
]
Promise.any(functions).spread(response => {
console.log(response)
})
这两个函数看起来像
const Promise = require('bluebird')
module.exports = function(data) {
return new Promise((resolve, reject) => {
let sum = 0
// SOME SLOW OPERATION FOR TEST
for (var i = 1; i <= 1000000000; i++) {
sum += i * data
}
resolve(sum)
})
}
但是使用此代码,函数可以同步运行。我希望他们在Promise.any
部分处理并发问题。我应该如何重写代码来执行此操作?我试图将函数包装在process.nextTick
中,但这个提示也不起作用。
答案 0 :(得分:1)
Promise不会进行同步操作并使它们成为可以并行运行的操作。这不是他们所做的,也不是他们能做的。相反,promises用于管理或协调已经能够在其他Javascript执行时在后台运行的操作。像这样的事情将是异步文件I / O,网络操作,计时器等......
node.js中的Javascript是单线程的。除非您启动其他进程或调用某些通过本机代码使用线程/进程的加载项,否则您无法在node.js中同时运行两个同步操作。它根本就不是为此而设计的。
在node.js中同时执行多个同步活动的常用方法是运行多个node.js进程。这样做时,每个node.js进程可以独立运行,可以使用多个CPU,并且可以同时真正执行不同的同步操作。这可以通过群集或某种类型的工作队列来完成,一组node.js进程正在从中拉出作业,或者可以通过启动其他进程以任意数量的自定义方式完成。