我正在尝试在javascript中并行调用多个函数。
可能吗?
例如:
我想获取数字的总和(0到100)。
首先,我要并行计算[1,2 ... 50]
和[51,52 ..., 100]
的部分和。
let sum1 = 0, sum2 = 0;
for(let i = 1; i < 51; i++) { sum1 += i}
for(let j = 51; j < 100; j++) {sum2 += j}
sum = sum1 + sum2;
我认为我可以使用Parallel.invoke()
在C#中做到这一点,但是在Javascript中可以吗?
还是在ReactJS中有可能?
答案 0 :(得分:2)
Javascript是一种单线程非阻塞编程语言,因此它不像C#或Python那样为多线程提供任何本机支持。但是,如果您的代码在Node.js上运行,则可以使用Worker API (Doc)或编写C ++插件来进行大量计算。在浏览器中,我认为您可以使用网络工作者,但我没有资格谈论它。
答案 1 :(得分:2)
是的。
在NodeJS中,您可以使用fork()或the cluster api运行并发任务并侦听来自主节点的消息,它不完全是线程,nodeJS是单线程,您将创建新进程。
在浏览器中,您可以使用webworkers,它类似于其他语言的线程。 WebWorkers在某些移动浏览器中不是fully supported。
编辑1:当然,这是一个nodeJS示例,您将不得不自己做“等待”部分,但是您有了这个概念。
const cluster = require('cluster');
if (cluster.isMaster) {
const nodes = 4;
const limit = 40000;
const nEachNode = (limit / nodes) |0;
for (let i = 0; i < nodes; i++) {
let worker = cluster.fork();
worker.send({ start: nEachNode * i, end: nEachNode });
worker.on('message', handleResponse);
}
let total = 0;
function handleResponse(response) {
total += response;
console.log(`worker answered, total: ${total}`);
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
console.log(`Worker ${process.pid} started`);
process.on('message', start);
function start(conf) {
let cumulative = 0;
for (let i = conf.start; i < conf.start + conf.end; i++) {
cumulative += i;
}
process.send(cumulative);
process.exit();
}
}