首页 > 编程语言 >鸿蒙编程江湖:ArkTS中Sendable数据在并发实例间的传递

鸿蒙编程江湖:ArkTS中Sendable数据在并发实例间的传递

时间:2024-10-25 12:59:23浏览次数:1  
标签:ArkTS 鸿蒙 传递 并发 实例 拷贝 数据 Sendable

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

Sendable 是 ArkTS 中用于实现数据在并发实例间传递的一种机制。Sendable 数据可以安全地在多线程之间共享,避免了数据竞争问题,并提高了并发编程的效率。

Sendable 协议的介绍

Sendable 协议定义了 ArkTS 的可共享对象体系及其规格约束。符合 Sendable 协议的数据(以下简称 Sendable 数据)可以在 ArkTS 并发实例间传递。
Sendable 数据的特点

  • 可序列化:Sendable 数据可以被序列化,以便在并发实例间传递。
  • 线程安全:Sendable 数据在并发实例间传递时,保证了数据的线程安全。
  • 共享或拷贝:Sendable 数据在并发实例间传递时,可以选择引用传递或拷贝传递。

Sendable 数据在多线程中的引用与拷贝传递

引用传递

  • Sendable 数据在并发实例间传递时,其引用会被复制。
  • 并发实例可以修改 Sendable 数据的内容,但这些修改不会影响其他并发实例。
    拷贝传递
  • Sendable 数据在并发实例间传递时,其内容会被复制。
  • 并发实例可以修改 Sendable 数据的内容,但这些修改不会影响其他并发实例的原始数据。

引用传递与拷贝传递的选择

选择引用传递还是拷贝传递取决于您的具体需求:

  • 引用传递:适用于数据量较小,且并发实例需要共享数据的情况。
  • 拷贝传递:适用于数据量较大,且并发实例需要独立操作数据的情况。

Sendable 数据的创建与传输的代码实现

以下是一个简单的示例,演示如何创建 Sendable 数据并将其传递到 TaskPool 中:

import { taskpool } from '@kit.ArkTS';
@Sendable
class MyData {
  public value: number = 0;
  constructor(value: number) {
    this.value = value;
  }
}
async function processData(data: MyData) {
  data.value += 1;
  console.log(data.value);
}
async function main() {
  const data = new MyData(10);
  const task = new taskpool.Task(processData, data);
  await taskpool.execute(task);
}
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Column() {
      Text(this.message)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(async () => {
          await main();
        })
        .width('100%');
    }
    .height('100%');
  }
}

这段代码定义了一个名为 Index 的组件,并在组件中显示了一条文本消息 "Hello World"。点击按钮会执行 main 函数,该函数创建一个 Sendable 对象并将其传递到 TaskPool 中。任务完成后,会在控制台输出修改后的数据值。

Sendable 数据传递机制与普通数据传递机制对比

特性 Sendable 数据传递 普通数据传递
可序列化 支持 支持
线程安全 支持 不支持
共享或拷贝 支持 支持
传递效率

总结

通过以上介绍,您可以了解到鸿蒙系统中 Sendable 数据的传递机制。Sendable 数据可以安全地在并发实例间传递,避免了数据竞争问题,并提高了并发编程的效率。希望本文能够帮助您掌握鸿蒙系统中的并发编程技术,并开发出更优秀的鸿蒙应用。

标签:ArkTS,鸿蒙,传递,并发,实例,拷贝,数据,Sendable
From: https://www.cnblogs.com/samex/p/18502287

相关文章

  • 鸿蒙编程江湖:深入理解TaskPool和Worker的并发任务执行
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。鸿蒙系统提供了两种并发能力:TaskPool和......
  • 鸿蒙编程江湖:异步编程的优势及 Promise的应用
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。异步编程是指编写能够同时执行多个任务,......
  • 鸿蒙编程江湖:并发编程基础与鸿蒙中的任务并发
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。并发编程是指在同一时间段内处理多个任......
  • 触觉智能赴南方科技大学进行Purple Pi OH开源鸿蒙开发板培训圆满完成!
    10月19日,深圳触觉智能科技有限公司来到了深圳南方科技大学电子信息实验教学示范中心(以下简称触觉智能和南科大),为同学们培训鸿蒙开发板。该开发板型号PurplePiOH,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发主板。据实验教学示范中心吴老师介绍,自......
  • 鸿蒙开发:什么是ArkTS语言
    ArkTS(也称为ArkTypeScript)是HarmonyOS的主力应用开发语言。面向万物互联时代,华为提出了“一次开发多端部署、可分可合自由流转、统一生态原生智能”三大应用与服务开发理念。针对多设备、多入口、服务可分可合等特性,华为提供了多种能力协助开发者降低开发门槛。HarmonyOS......
  • 鸿蒙网络编程系列35-通过数据包结束标志解决TCP粘包问题
    1.TCP数据传输粘包简介在本系列的第6篇文章《鸿蒙网络编程系列6-TCP数据粘包表现及原因分析》中,我们演示了TCP数据粘包的表现,如图所示:随后解释了粘包背后的可能原因,并给出了解决TCP传输粘包问题的两种思路,其中一种就是指定数据包结束标志,本节将通过一个示例演示这种思路......
  • 鸿蒙开发融云demo消息未读数
    鸿蒙开发融云demo消息未读数跟着我一步步搭建带界面的融云demo,这次是要显示未读数,未读数有两个,一个是消息列表的未读数,一个是主页消息tab上的未读数。一、消息列表的未读数先看下效果图:关键代码如下:if(this.chatItem.unreadMessageCount>0||this.customUnReadCou......
  • 鸿蒙开发初探
    目录引言一、鸿蒙操作系统概述1.微内核架构2.多设备协同二、鸿蒙开发环境搭建1.安装DevEcoStudio2.创建项目3.开发与调试三、鸿蒙应用的开发1.UI设计2.业务逻辑3.分布式能力四、鸿蒙的应用场景1.智能家居2.健康监测3.智能出行五、总结引言 ......
  • 第7节 arkTS Flex
    在ArkTS中,Flex是一种强大的布局组件,用于创建灵活的布局结构。以下是关于它的详细介绍:基本概念Flex布局基于弹性盒模型,它可以让子组件在容器内根据不同的规则进行排列和伸缩,以适应各种屏幕尺寸和布局需求。常用属性1.justifyContent·用于定义子组件......
  • 鸿蒙Next数据同步艺术:分布式数据对象的创建与管理
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言在多设备协同的智能生态中,华为鸿蒙......