gpt4 book ai didi

multithreading - 使用 webworker-threads 在 Node.js 中并发

转载 作者:搜寻专家 更新时间:2023-10-31 23:21:49 24 4
gpt4 key购买 nike

这个问题是关于 webworker-threads node.js module 的.

webworker-threads 模块的文档非常有限,我找不到任何新手友好的示例来说明如何实现我的目标。

简而言之,我有两个需要同时运行的 CPU 密集型函数,并且必须在它们完成后立即返回结果并打印出来。因为这些同步方法是阻塞的,所以我现在的模型是这样的:

enter image description here

我想要实现的是:

enter image description here

但是我不是专家,我无法将 Readme.md 中为 webworker-threads 模块提供的信息翻译成我自己的情况。

我目前的 hack-job 代码是这样的:

var Worker = require('webworker-threads').Worker;

//console.time("worker1");
var worker = new Worker(function(){
onmessage = function(event) {
postMessage(event.data);
self.close();
};
});
worker.onmessage = function(event) {
console.log("Worker1 said : " + event.data);
};
worker.postMessage(work());
//console.timeEnd("worker1")

//console.time("worker2");
var worker2 = new Worker(function(){
onmessage = function(event) {
postMessage(event.data);
self.close();
};
});
worker2.onmessage = function(event) {
console.log("Worker2 said : " + event.data);
};
worker2.postMessage(work2());
//console.timeEnd("worker2")

function work(){
var total = 0;
for (var i=0; i<430046534; i++){
total += (i*i*i);
}
return total;
}

function work2(){
var total = 0;
for (var i=0; i<630746533; i++){
total += (i*i*i);
}
return total;
}

但是,遗憾的是,只有当第二个工作人员完成时,结果才会打印到控制台,我什至不确定我是否以正确的方式使用这个模块。

最佳答案

您将工作函数的结果发布给工作人员。将该函数放入 web worker 中,然后在 onmessage 期间调用它。

var worker = new Worker(function(){
function work(n){
var res;
for (var i = 0; i < n; i++){
res += i * i * i;
}
return res;
}

onmessage = function(event) {
var result = work(event.data)
postMessage(result);
self.close();
};
});

您正在服务器端完成所有繁重的工作,您想将工作交给工作人员。您在主线程上工作会阻塞整个服务器线程。

关于multithreading - 使用 webworker-threads 在 Node.js 中并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22936092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com