Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第9章:多线程与并发

第9章:多线程与并发

Worker线程

1. 基本概念

ArkTS中的Worker线程是一种独立于主线程的后台执行环境,用于处理耗时操作(如复杂计算、大数据处理等),避免阻塞UI线程。关键特性包括:

  • 独立运行环境:拥有自己的内存空间和事件循环
  • 通信机制:通过消息传递与主线程交互(postMessage/onmessage)
  • 生命周期管理:可手动创建和终止

2. 创建Worker线程

2.1 创建Worker文件

// workers/calculation.worker.ts
const workerPort = worker.workerPort;

workerPort.onmessage = (e: MessageEvent) => {
  const data = e.data;
  // 执行耗时计算
  const result = heavyCalculation(data);
  workerPort.postMessage(result);
};

function heavyCalculation(input: number[]): number {
  // 模拟复杂计算
  return input.reduce((a, b) => a + b, 0);
}

2.2 主线程调用

// 主线程代码
const worker = new Worker("workers/calculation.worker.ts");

// 发送数据
worker.postMessage([1, 2, 3, 4, 5]);

// 接收结果
worker.onmessage = (e: MessageEvent) => {
  console.log("计算结果:", e.data);
  worker.terminate(); // 使用后销毁
};

3. 通信机制

通信方式描述示例
单向通信主线程→Worker或Worker→主线程worker.postMessage()
双向通信通过消息回调实现交互onmessage事件处理
传输大型数据使用Transferable对象postMessage(buffer, [buffer])

4. 生命周期管理

// 创建Worker
const worker = new Worker("path/to/worker");

// 主动终止
worker.terminate(); 

// 错误处理
worker.onerror = (e) => {
  console.error("Worker错误:", e.message);
};

5. 使用场景

  1. CPU密集型任务

    • 图像/视频处理
    • 复杂算法计算
  2. IO操作

    • 大数据文件读写
    • 本地数据库操作
  3. 定时任务

    • 后台定时数据同步

6. 注意事项

  • 内存隔离:Worker无法直接访问DOM或主线程变量
  • 性能开销:创建Worker有约5-10ms的初始化延迟
  • 调试技巧:
    // arkconfig.json
    {
      "worker": {
        "debug": true // 启用Worker调试模式
      }
    }
    

7. 完整示例:素数计算

// prime.worker.ts
worker.workerPort.onmessage = (e) => {
  const max = e.data;
  const primes = findPrimes(max);
  worker.workerPort.postMessage(primes);
};

function findPrimes(max: number): number[] {
  // 实现素数筛选算法...
}
// 主线程调用
const primeWorker = new Worker("workers/prime.worker.ts");
primeWorker.postMessage(1000000);
primeWorker.onmessage = (e) => {
  console.log("找到素数数量:", e.data.length);
};

8. 最佳实践

  1. 复用Worker:避免频繁创建/销毁
  2. 批量处理:合并多次消息发送
  3. 错误边界:
    worker.onmessageerror = () => {
      // 处理消息解析错误
    };
    
  4. 资源释放:在页面卸载时调用terminate()
Last Updated:: 5/22/25, 5:00 PM