Javascript HTML5 Webworker启动同步保证

Javascript HTML5 Webworker启动同步保证,javascript,html,multithreading,web-worker,Javascript,Html,Multithreading,Web Worker,我有一点javascript我想在一个webworker中运行,我很难理解正确的方法让它们以锁定的方式工作。我从主脚本调用WebWorker,如以下简化脚本所示: // main.js werker = new Worker("webWorkerScaffold.js"); // #1 werker.onmessage = function(msgObj){ console.log("Worker Reply") console.log(msgObj); doSomet

我有一点javascript我想在一个webworker中运行,我很难理解正确的方法让它们以锁定的方式工作。我从主脚本调用WebWorker,如以下简化脚本所示:

// main.js
werker = new Worker("webWorkerScaffold.js");

// #1
werker.onmessage = function(msgObj){
    console.log("Worker Reply")
    console.log(msgObj);
    doSomethingWithMsg(msgObj);
};
werker.onerror = function(err){
    console.log("Worker Error:");
    console.log(err);
};

werker.postMessage("begin");
然后,免费员工脚本如下所示:

// webWorkerScaffold.js
var doWorkerStuffs = function(msg){};  // Omitted

// #2
onmessage = function (msgObj){
    // Messages in will always be json                                                                                                                                  
    if (msgObj.data.msg === "begin")
        doWorkerStuffs();
};
此代码(实际版本)按预期工作,但我很难确认它始终能够正确执行。考虑以下事项:

// webWorkerScaffold.js
var doWorkerStuffs = function(msg){};  // Omitted

// #2
onmessage = function (msgObj){
    // Messages in will always be json                                                                                                                                  
    if (msgObj.data.msg === "begin")
        doWorkerStuffs();
};
  • 调用“new Worker()”,生成一个新线程
  • 生成的线程加载速度慢(比如挂起在“//#2”)
  • 父线程执行“werker.postMessage…”,但没有收件人
同样的情况也适用于相反的方向,在这种情况下,我可能会更改worker脚本,以便在内部设置后向外发出噪音。在这种情况下,主线程可能挂起在“/#1”处,并错过传入消息,因为它的通信没有启动

是否有某种方法可以保证这些脚本以锁定的方式向前移动

我真正想要的是一个类似zmq的REP/REQ语义,当1:1事务发生时,其中一个或另一个块(或回调)

松散相关: