1# 使用Worker进行线程间通信 2 3 4[Worker](../reference/apis/js-apis-worker.md)是与主线程并行的独立线程。创建Worker的线程被称为宿主线程,Worker工作的线程被称为Worker线程。创建Worker时传入的脚本文件在Worker线程中执行,通常在Worker线程中处理耗时的操作,需要注意的是,Worker中不能直接更新Page。 5 6 7Worker的开发步骤如下: 8 9 101. 在工程的[模块级build-profile.json5](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-building-configuration-0000001218440654#section6887184182020)文件的buildOption属性中添加配置信息。 11 12 ```ts 13 "buildOption": { 14 "sourceOption": { 15 "workers": [ 16 "./src/main/ets/workers/worker.ts" 17 ] 18 } 19 } 20 ``` 21 222. 根据build-profile.json5中的配置创建对应的worker.ts文件。 23 24 ```ts 25 import worker from '@ohos.worker'; 26 27 let parent = worker.workerPort; 28 29 // 处理来自主线程的消息 30 parent.onmessage = function(message) { 31 console.info("onmessage: " + message) 32 // 发送消息到主线程 33 parent.postMessage("message from worker thread.") 34 } 35 ``` 36 373. 主线程中使用如下方式初始化和使用worker。 38 - Stage模型: 39 40 ```ts 41 import worker from '@ohos.worker'; 42 43 let wk = new worker.ThreadWorker("entry/ets/workers/worker.ts"); 44 45 // 发送消息到worker线程 46 wk.postMessage("message from main thread.") 47 48 // 处理来自worker线程的消息 49 wk.onmessage = function(message) { 50 console.info("message from worker: " + message) 51 52 // 根据业务按需停止worker线程 53 wk.terminate(); 54 } 55 ``` 56 57 - FA模型: 58 59 ```ts 60 import worker from '@ohos.worker'; 61 62 let wk = new worker.ThreadWorker("../workers/worker.ts"); 63 64 // 发送消息到worker线程 65 wk.postMessage("message from main thread.") 66 67 // 处理来自worker线程的消息 68 wk.onmessage = function(message) { 69 console.info("message from worker: " + message) 70 71 // 根据业务按需停止worker线程 72 wk.terminate(); 73 } 74 ``` 75 76> **说明:** 77> 78> - build-profile.json5中配置的worker.ts的相对路径都为`./src/main/ets/workers/worker.ts`时,在Stage模型下创建worker需要传入路径`entry/ets/workers/worker.ts`;在FA模型下创建worker需要传入路径`../workers/worker.ts`。 79> - 主线程与Worker线程间支持的数据类型参考[序列化支持类型](../reference/apis/js-apis-worker.md#序列化支持类型)。 80