From 2a8c10f6d34e7122ae2fbfc8b756b8798db11308 Mon Sep 17 00:00:00 2001 From: caolili123 Date: Mon, 9 Jun 2025 14:23:31 +0800 Subject: [PATCH 1/3] add serializable overview Signed-off-by: caolili123 --- zh-cn/application-dev/arkts-utils/Readme-CN.md | 1 + .../multi-thread-concurrency-overview.md | 1 + .../arkts-utils/serializable-overview.md | 16 ++++++++++++++++ zh-cn/application-dev/website.md | 1 + 4 files changed, 19 insertions(+) create mode 100644 zh-cn/application-dev/arkts-utils/serializable-overview.md diff --git a/zh-cn/application-dev/arkts-utils/Readme-CN.md b/zh-cn/application-dev/arkts-utils/Readme-CN.md index c1f2c89755d..619d7b4d441 100644 --- a/zh-cn/application-dev/arkts-utils/Readme-CN.md +++ b/zh-cn/application-dev/arkts-utils/Readme-CN.md @@ -25,6 +25,7 @@ - 并发线程间通信 - [ArkTS线程间通信概述](interthread-communication-overview.md) - 线程间通信对象 + - [线程间通信对象概述](serializable-overview.md) - [普通对象](normal-object.md) - [ArrayBuffer对象](arraybuffer-object.md) - [SharedArrayBuffer对象](shared-arraybuffer-object.md) diff --git a/zh-cn/application-dev/arkts-utils/multi-thread-concurrency-overview.md b/zh-cn/application-dev/arkts-utils/multi-thread-concurrency-overview.md index eb32a6bf4f2..08ecbe24bd0 100644 --- a/zh-cn/application-dev/arkts-utils/multi-thread-concurrency-overview.md +++ b/zh-cn/application-dev/arkts-utils/multi-thread-concurrency-overview.md @@ -84,6 +84,7 @@ class BufferQueue { if (this.mutex.lock()) { if (this.queue.empty()) { res = 1; + return res; } let num: number = this.queue.pop(value); this.mutex.unlock(); diff --git a/zh-cn/application-dev/arkts-utils/serializable-overview.md b/zh-cn/application-dev/arkts-utils/serializable-overview.md new file mode 100644 index 00000000000..ec248c2af2e --- /dev/null +++ b/zh-cn/application-dev/arkts-utils/serializable-overview.md @@ -0,0 +1,16 @@ +# 线程间通信对象概述 + +在多线程并发场景中,例如通过TaskPool或Worker创建后台线程,不同线程间需要进行数据交互。由于线程间内存隔离,线程间通信对象必须通过序列化实现值拷贝或内存共享。 + +> **说明:** +> +> - 单次序列化传输的数据量大小限制为16MB。 +> - 序列化不支持使用[@State装饰器](../ui/state-management/arkts-state.md)、[@Prop装饰器](../ui/state-management/arkts-prop.md)、[@Link装饰器](../ui/state-management/arkts-link.md)等装饰器修饰的复杂类型。 + +目前ArkTS支持线程间通信的对象有以下几种: + +- [普通对象](normal-object.md):可直接传递基本数据类型及自定义对象(需满足序列化规范)。 +- [ArrayBuffer对象](arraybuffer-object.md):用于二进制数据的高效传递,适用于大段连续内存数据(如图片、音频原始数据)。 +- [SharedArrayBuffer对象](shared-arraybuffer-object.md):支持多线程共享内存,允许线程间直接访问同一块内存区域,提升数据传递效率。 +- [Transferable对象(NativeBinding对象)](transferabled-object.md):支持跨线程转移对象所有权(如文件描述符、图形资源等),转移后原线程不再拥有访问权限。 +- [Sendable对象](arkts-sendable.md):符合ArkTS语言规范的可共享对象,需通过[@Sendable装饰器](arkts-sendable.md#sendable装饰器)标记,并且满足Sendable约束,详情可查[Sendable使用规则与约束](sendable-constraints.md)。 diff --git a/zh-cn/application-dev/website.md b/zh-cn/application-dev/website.md index 4e27d75d292..58a8c078bd3 100644 --- a/zh-cn/application-dev/website.md +++ b/zh-cn/application-dev/website.md @@ -268,6 +268,7 @@ - 并发线程间通信 - [ArkTS线程间通信概述](arkts-utils/interthread-communication-overview.md) - 线程间通信对象 + - [线程间通信对象概述](arkts-utils/serializable-overview.md) - [普通对象](arkts-utils/normal-object.md) - [ArrayBuffer对象](arkts-utils/arraybuffer-object.md) - [SharedArrayBuffer对象](arkts-utils/shared-arraybuffer-object.md) -- Gitee From 0ab4cc111870605f3af50e6952c65d93f110f845 Mon Sep 17 00:00:00 2001 From: caolili123 Date: Thu, 12 Jun 2025 15:58:26 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: caolili123 --- .../arkts-utils/taskpool-introduction.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/zh-cn/application-dev/arkts-utils/taskpool-introduction.md b/zh-cn/application-dev/arkts-utils/taskpool-introduction.md index 87b72375616..a426bc2eaa6 100644 --- a/zh-cn/application-dev/arkts-utils/taskpool-introduction.md +++ b/zh-cn/application-dev/arkts-utils/taskpool-introduction.md @@ -112,7 +112,7 @@ function add(num1: number, num2: number): number { async function concurrentFunc(): Promise { try { const task: taskpool.Task = new taskpool.Task(add, 1, 2); - console.info(`taskpool res is: ${await taskpool.execute(task)}`); + console.info(`taskpool res is: ${await taskpool.execute(task)}`); // 输出结果:taskpool res is: 3 } catch (e) { console.error(`taskpool execute error is: ${e}}`); } @@ -198,32 +198,32 @@ async function testConcurrentFunc() { const task6: taskpool.Task = new taskpool.Task(testPromise5); taskpool.execute(task1).then((d: object) => { - console.info(`task1 res is: ${d}`); + console.info(`task1 res is: ${d}`); // 输出结果:task1 res is: 3 }).catch((e: object) => { console.error(`task1 catch e: ${e}`); }) taskpool.execute(task2).then((d: object) => { console.info(`task2 res is: ${d}`); }).catch((e: object) => { - console.error(`task2 catch e: ${e}`); + console.error(`task2 catch e: ${e}`); // 输出结果:task2 catch e: Error: Can't return Promise in pending state }) taskpool.execute(task3).then((d: object) => { - console.info(`task3 res is: ${d}`); + console.info(`task3 res is: ${d}`); // 输出结果:task3 res is: 3 }).catch((e: object) => { console.error(`task3 catch e: ${e}`); }) taskpool.execute(task4).then((d: object) => { - console.info(`task4 res is: ${d}`); + console.info(`task4 res is: ${d}`); // 输出结果:task4 res is: 1 }).catch((e: object) => { console.error(`task4 catch e: ${e}`); }) taskpool.execute(task5).then((d: object) => { - console.info(`task5 res is: ${d}`); + console.info(`task5 res is: ${d}`); // 输出结果:task5 res is: 1 }).catch((e: object) => { console.error(`task5 catch e: ${e}`); }) taskpool.execute(task6).then((d: object) => { - console.info(`task6 res is: ${d}`); + console.info(`task6 res is: ${d}`); // 输出结果:task6 res is: Promise setTimeout after resolve }).catch((e: object) => { console.error(`task6 catch e: ${e}`); }) -- Gitee From f89ebc267b00659cb218c84a3e059b706b260b99 Mon Sep 17 00:00:00 2001 From: caolili123 Date: Tue, 17 Jun 2025 19:12:58 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=89=93=E5=8D=B0=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: caolili123 --- zh-cn/application-dev/arkts-utils/async-concurrency-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh-cn/application-dev/arkts-utils/async-concurrency-overview.md b/zh-cn/application-dev/arkts-utils/async-concurrency-overview.md index b5fe4e2658a..ef79c92eb2d 100644 --- a/zh-cn/application-dev/arkts-utils/async-concurrency-overview.md +++ b/zh-cn/application-dev/arkts-utils/async-concurrency-overview.md @@ -41,7 +41,7 @@ import { BusinessError } from '@kit.BasicServicesKit'; // 使用 then 方法定义成功和失败的回调 promise.then((result: number) => { - console.info(`Succesed number is ${result}`); // 成功时执行 + console.info(`The number for success is ${result}`); // 成功时执行 }, (error: BusinessError) => { console.error(error.message); // 失败时执行 } -- Gitee