鸿蒙原生APP开发之应用架构设计(线程间通信)

往期推文全新看点

概述

线程间通信指的是并发多线程间存在的数据交换行为,目前已支持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线程通信的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值