javascript - 如何在数组中向网络工作人员创建/发布消息

标签 javascript multithreading web-worker

问题很简单:

示例:

For (iterate based on amount of cores){
   Let worker = workers[I]
   Worker.postmessage
}

示例结束。

免责声明:此示例仅显示预期的最终结果,绝不是所谓的“工作条件”。另请注意,上面使用的方法不会返回“workers[iterator]”的工作人员,而只是未定义。

目标:创建工作方法:

1:制作未知数量的工作人员数组(基于核心)。

2:构建该数组后,向每个工作人员发送一条消息并返回结果(未定义除外)。

注意:我确实有一个关于它不起作用的假设:

1:Web Worker 被创建,并且只能通过创建它们的事件进行访问,并且其唯一接受的是 onmessage“事件”处理程序。

  • 与我的假设相反,有些东西与上面所写的内容很相似,例如允许线程池和其他过程的 thread.js。

这是我问的主要原因,因为我确实知道这是可能的,但想要一个简单的答案。

感谢您的宝贵时间。

最佳答案

这是一个例子:

function createWorker (workerScript) {
    const blob = new Blob([`(${workerScript})(self)`], {type: 'application/javascript'});
    return new Worker(URL.createObjectURL(blob));
};

function workerCode (self) {
    self.onmessage = function (message) {
        postMessage(`Data from worker: ${message.data}`);
    };
};

// assuming that you will send only one message to the worker,
// and that the worker will produce only one message too.
function workerPromise (worker, message) {
    const promise = new Promise((resolve, reject) => {
        worker.onmessage = resolve;
    }).then(message => message.data);
    worker.postMessage(message);
    return promise;
}

(async () => {
    const workers = [];
    for (let i = 0; i < navigator.hardwareConcurrency; i++) {
        workers.push(createWorker(workerCode));
    }

    const results = await Promise.all(
        workers.map((w, index) => workerPromise(w, `worker ${index}`))
    );

    console.log(results);
})();

关于javascript - 如何在数组中向网络工作人员创建/发布消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50186470/

相关文章:

java - 线程 : Lazy Initialization vs Static Lazy Initialization

javascript - 将 flot 饼图另存为 PDF

JavaScript - 从字符串中删除 Minecraft 颜色代码

javascript - 使用 window.hasOwnProperty()

c# - 如何通过lambda表达式获取线程的 "pass in any number of arguments to the method"?

c# - 线程(这些线程是否自行退出或中止?)

firefox - 带有Firefox的WebWorkers和WebSockets

javascript - 如何从 REST API 高效且定期刷新 Bootstrap 4 表的内容?

javascript - Webpack 工作加载器 : How to make it work as a dependency?

javascript - 右键单击音频被禁用