• Home
Name Date Size #Lines LOC

..--

AppScope/06-May-2025-3432

entry/06-May-2025-1,3571,109

hvigor/06-May-2025-2019

screenshots/device/06-May-2025-

.gitignoreD06-May-2025142 1212

README_zh.mdD06-May-20253.6 KiB7956

build-profile.json5D06-May-20251.2 KiB5150

hvigorfile.tsD06-May-2025222 75

hvigorwD06-May-20251.4 KiB4928

hvigorw.batD06-May-20252.1 KiB7960

oh-package.json5D06-May-2025240 1312

ohosTest.mdD06-May-20251.7 KiB1713

README_zh.md

1# N-Body模拟程序
2
3### 介绍
4
5在本示例中,使用ArkTS编程语言开发了业界编程语言基准测试项目[Benchmarks Game](https://salsa.debian.org/benchmarksgame-team/benchmarksgame/)中的[N体问题模拟程序](https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/nbody.html#nbody),实现类木星体轨道计算。
6
7本示例用到了[@ohos.taskpool](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-arkts/js-apis-taskpool.md)和[@ohos.worker](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-arkts/js-apis-worker.md) 接口。示例中的程序可以用于AOT(Ahead Of Time)等性能测试。
8
9### 效果预览
10|主页|计算中|重复点击|计算结果|
11|-------|-------|-------|-------|
12|![](screenshots/device/n-body_entry.jpeg)|![](screenshots/device/n-body_calculating.jpeg)|![](screenshots/device/n-body_reClick.jpeg)|![](screenshots/device/n-body_result.jpeg)|
13
14使用说明
15
161.点击按钮Calculate By TaskPool,会从任务池创建一个任务,进行N-Body计算。
17
182.点击按钮Calculate By Worker,会创建一个Worker,进行N-Body计算。
19
20### 工程目录
21```
22entry/src/main/ets
23|---/entryability
24|   |---EntryAbility.ts                  // 封装整个模块启用
25|---/model
26|   |---CalculateUtil.ets                // worker和taskpool都在这里调用
27|   |---NBody_ETS_6.ets                  // 天体轨道计算
28|---/pages
29|   |---Index.ets                        // 首页
30|---/utils
31|   |---Constants.ets                    // 封装只读常量
32|   |---Logger.ets                       // 封装整个日志
33|---/worker
34|   |---CalculateWorker.ts               // worker线程
35
36```
37### 相关概念
38
39AOT(Ahead Of Time),即预先编译,在应用程序运行前,将代码预先编译成高性能机器代码,避免在运行时的编译性能消耗和内存消耗,让程序在首次运行就能通过执行高性能机器码获得性能收益。
40
41### 具体实现
42
43- 使用TaskPool开启子线程运行,计算500万次时间推移天体运行轨道,源码参考[CalculateUtil.ets ](entry/src/main/ets/model/CalculateUtil.ets )
44  - 通过调用computeNBodyByTaskPool()创建一个task任务,并向taskpool线程池派发子线程任务。
45  - 等待子线程执行任务computeTask(),计算完成后再把结果返回主线程。
46
47- 使用Worker开启子线程运行,计算5000万次时间推计算移天体运行轨道,源码参考[CalculateUtil.ets ](entry/src/main/ets/model/CalculateUtil.ets )
48  - 通过调用computeNBodyByWorker()创建一个worker线程,把要计算的时间推移量发送给worker线程。
49  - 等待worker线程调用computeTask()计算完成后再把结果返回主线程。
50- computeTask()完成具体计算任务,源码参考[NBody_ETS_6.ets](entry/src/main/ets/model/NBody_ETS_6.ts)
51  - offsetMomentum() 建立孤立系统的动量守恒。
52  - advance() 更新天体在按指定的时间变化后的位置信息。
53  - energy() 判断系统计算前后机械能守恒。
54
55### 相关权限
56
57不涉及。
58
59### 依赖
60
61不涉及。
62
63### 约束与限制
64
651.本示例已适配API version 10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0Release) 。
66
672.本示例需要使用DevEco Studio 版本号(4.0Release)及以上才可编译运行。
68
69### 下载
70
71如需单独下载本工程,执行如下命令:
72
73````
74git init
75git config core.sparsecheckout true
76echo code/Performance/ArkRuntime/NBody/ > .git/info/sparse-checkout
77git remote add origin https://gitee.com/openharmony/applications_app_samples.git
78git pull origin master
79````