您好!欢迎访问家园网-www.jy.wang!

家园网

worker.postMessage(JSON.stringify(intArray));这一行生成的json字符串是发给主线程还是发给worker.js?

网络 作者:本站 点击:

worker.postMessage(JSON.stringify(intArray));

这一行生成的json字符串是发给主线程还是发给worker.js?


这一行是发给 worker.js(子线程)的!

让我通过完整的代码结构来说明:

代码定位

// script.js 文件内容
onmessage = function(event) {
    var intArray = new Array(100);    // 随机数组
    // 生成100个随机数
    for(var i = 0; i < 100; i++)
        intArray[i] = parseInt(Math.random() * 100);
    
    var worker;
    // 创建子线程
    worker = new Worker("worker.js");  // ← 创建worker.js线程
    
    // 把随机数组提交给子线程进行挑选工作
    worker.postMessage(JSON.stringify(intArray));  // ← 这里是发给worker.js
    
    worker.onmessage = function(event) {
        // 把挑选结果返回主页面
        postMessage(event.data);  // ← 这里是发给主线程
    }
}

消息传递路径

主线程 (HTML页面)
    ↑
    │ postMessage(event.data)  ← 这是script.js中最后一行代码发送的
    │
script.js (中间层Worker)
    │
    │ worker.postMessage(JSON.stringify(intArray))  ← 这是您问的这一行,发给worker.js
    ↓
worker.js (最内层Worker)

关键区别

worker.postMessage() vs postMessage()

// 1. worker.postMessage() - 发送给特定的Worker实例
worker.postMessage(JSON.stringify(intArray));  
// 这是发给worker变量引用的Worker线程(即worker.js)
// 2. postMessage() - 发送给父线程(创建自己的线程)
postMessage(event.data);  
// 这是在script.js中,发送给创建它的主线程

实际执行流程

// 在script.js中:
worker.postMessage(JSON.stringify(intArray));
// 这条消息的接收者是:
// ↓
// 在worker.js中:
onmessage = function(event) {
    // event.data 就是上面发送的JSON字符串
    var intArray = JSON.parse(event.data);  // 还原数组
    // ... 处理数据
}

可以这样理解

  • postMessage():发给"我爸"(创建我的线程)

  • worker.postMessage():发给"我儿子"(我创建的线程)

所以在这段代码中:

  1. worker.postMessage(JSON.stringify(intArray)) → 发给 worker.js(儿子)

  2. postMessage(event.data) → 发给主线程(爸爸)

标签: