gpt4 book ai didi

javascript - 使用 Web Worker 卸载工作

转载 作者:行者123 更新时间:2023-11-29 15:31:48 25 4
gpt4 key购买 nike

演示文稿显示了以下代码作为 promise 功能的示例。

目的是让代码将与 JSON 相关的计算卸载到 Web Worker。

var worker = new Worker('asyncTask.js');

function work(json) {
return new Promise(function(resolve, reject) {
function onMessage() {
worker.removeEventListener('message', onMessage);
resolve.apply(this, arguments)
}

worker.addEventListener('message', onMessage);
worker.postMessage(json);
});
}

我说这段代码容易受到竞争条件的影响是否正确,因为 onMessage 回调接收到的消息可能与“相应的”postMessage 无关?

最佳答案

请注意,我不是 WebWorker 专家,我认为答案完全取决于工作程序代码的性质。由于 worker 上下文与普通上下文一样是单线程的,如果 worker 代码在收到消息后只是进行一些计算,并在完成后返回答案,那么即使有其他请求未决,它们也​​会等待。如果工作人员可能会暂停并等待更多消息,则必须设置一些内容以将响应与所请求的内容相关联。

我的想法是,为使用 Web Worker 而编写的任何类型的服务库最终可能看起来有点像 Erlang 系统,具有用于管理传入和传出 Worker 的消息的浏览器上下文的前端 API。如果 worker 通信需要匹配请求和响应,那么前端库将负责处理(例如,通过将 API 参数包装在具有唯一请求标识符或其他内容的对象中)。

关于javascript - 使用 Web Worker 卸载工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34144272/

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