• Home
Name Date Size #Lines LOC

..--

AppScope/06-May-2025-3532

entry/06-May-2025-1,027943

hvigor/06-May-2025-3836

screenshots/06-May-2025-

.gitignoreD06-May-2025133 1212

README.mdD06-May-20254.5 KiB9365

build-profile.json5D06-May-20251.4 KiB5857

code-linter.json5D06-May-2025958 3534

hvigorfile.tsD06-May-2025843 225

oh-package.json5D06-May-2025834 2624

ohosTest.mdD06-May-20251 KiB119

README.md

1# ArkTS 线程间通信对象
2
3### 介绍
4
5#### 普通对象
6
7普通对象跨线程时通过拷贝形式传递,两个线程的对象内容一致,但是指向各自线程的隔离内存区间,被分配在各自线程的虚拟机本地堆(LocalHeap)。例如Ecmascript262规范定义的Object、Array、Map等对象是通过这种方式实现跨并发实例通信的。
8
9#### ArrayBuffer对象
10
11ArrayBuffer内部包含一块Native内存,该ArrayBuffer的JS对象壳被分配在虚拟机本地堆(LocalHeap)。与普通对象一样,需要经过序列化与反序列化拷贝传递,但是Native内存有两种传输方式:拷贝和转移。
12
13#### SharedArrayBuffer对象
14
15SharedArrayBuffer内部包含一块Native内存,其JS对象壳被分配在虚拟机本地堆(LocalHeap)。支持跨并发实例间共享,但是访问及修改需要采用Atomics类,防止数据竞争。SharedArrayBuffer可以用于多个并发实例间的状态共享或者数据共享。
16
17#### Transferable对象(NativeBinding对象)
18
19Transferable对象(也称为NativeBinding对象)指的是一个JS对象,绑定了一个C++对象,且主体功能由C++提供,其JS对象壳被分配在虚拟机本地堆(LocalHeap)。跨线程传输时可以直接复用同一个C++对象,相比于JS对象的拷贝模式,传输效率较高。因此,可共享或转移的NativeBinding对象也被称为Transferable对象。
20
21该工程中展示的代码详细描述可查如下链接:
22
23- [普通对象](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/normal-object.md)
24- [ArrayBuffer对象](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/arraybuffer-object.md)
25- [SharedArrayBuffer对象](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/shared-arraybuffer-object.md)
26- [Transferable对象(NativeBinding对象)](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/transferabled-object.md)
27
28### 效果预览
29
30|                             首页                             |                      执行及结果即时反馈                      |
31| :----------------------------------------------------------: | :----------------------------------------------------------: |
32| <img src="./screenshots/CommunicationObjects_1.png" style="zoom: 50%;" /> | <img src="./screenshots/CommunicationObjects_2.png" style="zoom: 50%;" /> |
33
34### 使用说明
35
361. 在主界面,点击任意按钮进行跳转,点击Hello World执行程序
372. 执行结果会即时反馈在屏幕中央,并在控制台打印log。
38
39### 工程目录
40
41```
42entry/src/
43 ├── main
44 │   ├── ets
45 │   │   ├── entryability
46 │   │   ├── entrybackupability
47 │   │   ├── managers
48 │   │       ├── ArrayBufferObject.ets       // ArrayBuffer对象示例代码
49 │   │       ├── NormalObject.ets            // 普通对象示例代码
50 │   │       ├── pixelMapTest.ets            // Transferable对象示例代码
51 │   │       ├── SharedArrayBufferObject.ets // SharedArrayBuffer对象示例代码
52 │   │       ├── Test.ets					 // 普通对象示例代码
53 │   │       ├── TransferabledObject.ets     // Transferable对象示例代码
54 │   │   ├── pages
55 │   │       ├── Index.ets                   // 首页
56 │   │   ├── util
57 │   │       ├── CommonButton.ets 		     // 首页跳转UI
58 │   │       ├── resource.ets 		         // 资源引用转换
59 │   ├── module.json5
60 │   └── resources
61 ├── ohosTest
62 │   ├── ets
63 │   │   ├── test
64 │   │       ├── Ability.test.ets            // 自动化测试代码
65```
66
67### 相关权限
68
69不涉及。
70
71### 依赖
72
73不涉及。
74
75### 约束与限制
76
771.本示例仅支持标准系统上运行, 支持设备:RK3568。
78
792.本示例为Stage模型,支持API14版本SDK,版本号:5.0.2.57,镜像版本号:OpenHarmony_5.0.2.58。
80
813.本示例需要使用DevEco Studio 5.0.1 Release (Build Version: 5.0.5.306, built on December 6, 2024)及以上版本才可编译运行。
82
83### 下载
84
85如需单独下载本工程,执行如下命令:
86
87````
88git init
89git config core.sparsecheckout true
90echo code/DocsSample/ArkTs/ArkTsConcurrent/ConcurrentThreadCommunication/InterThreadCommunicationObjects/CommunicationObjects > .git/info/sparse-checkout
91git remote add origin https://gitee.com/openharmony/applications_app_samples.git
92git pull origin master
93````