往期推文全新看点
- 鸿蒙(HarmonyOS)北向开发知识点记录~
- 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~
- 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
- 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
- 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
- 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
- 记录一场鸿蒙开发岗位面试经历~
- 持续更新中……
概述
线程间通信指的是并发多线程间存在的数据交换行为,目前已支持ArkTS、C++等开发语言,因此存在不同语言、不同线程的通信场景,接下来详细展开介绍。
同语言线程间通信(ArkTS内)
-
场景描述
ArkTS线程指的是包含ArkTS运行环境的线程,包括主线程、TaskPool线程、Worker线程。它们之间可以通过不同的接口进行通信。
常见业务场景如下所示:
| 常见业务场景 | 具体业务描述 |
|---|---|
| 宿主JS线程<->TaskPool线程 | 通过使用TaskPool,分发任务到子线程。TaskPool子任务与其宿主线程之间需要通信的场景 |
| 宿主JS线程<->Worker线程 | 通过使用Worker,启动子线程,执行任务。Worker子线程与其宿主线程之间需要通信的场景 |
| 任意JS线程<->任意JS线程 | 除了上述两种线程外,其他任意两个JS线程需要通信的场景 |
- 实现方案介绍
| 跨线程交互场景 | 通信方式 | 通信优先级 |
|---|---|---|
| 宿主JS线程->TaskPool线程 | 参数传递后分发任务;过程中不支持正向通信 | 支持 |
| TaskPool线程->宿主JS线程 | 结果返回;sendData触发宿主线程异步回调,底层为uv_async_send实现 | 不支持 |
| 宿主JS线程->Worker线程 | 采用postMessage&onmessage异步通信 | 不支持 |
| Worker线程->宿主JS线程 | 异步方式:采用postMessage & onmessage异步通信 同步方式:支持Worker线程同步调用宿主线程注册的方法,并返回结果 |
不支持 |
| 任意JS线程<->任意JS线程 | 使用@ohos.emitter实现双向异步通信 | 支持 |
-
业务实现中的关键点
ArkTS线程推荐使用TaskPool及Worker的原生接口通信。 -
与业界方案特殊差异说明
线程通信采用消息循环的机制,与业界一致。
跨语言多线程通信(C++与ArkTS)
- 场景描述
ArkTS线程指的是包含ArkTS运行环境的线程,包括主线程、TaskPool线程和Worker线程。由于HarmonyOS支持通过Node-API开发C++业务,用户可以在C++层创建线程,因此C++线程存在与ArkTS线程通信的场景。


2728

被折叠的 条评论
为什么被折叠?



