| Name | Date | Size | #Lines | LOC | ||
|---|---|---|---|---|---|---|
| .. | - | - | ||||
| AppScope/ | 06-May-2025 | - | 34 | 32 | ||
| entry/ | 06-May-2025 | - | 1,357 | 1,109 | ||
| hvigor/ | 06-May-2025 | - | 20 | 19 | ||
| screenshots/device/ | 06-May-2025 | - | ||||
| .gitignore | D | 06-May-2025 | 142 | 12 | 12 | |
| README_zh.md | D | 06-May-2025 | 3.6 KiB | 79 | 56 | |
| build-profile.json5 | D | 06-May-2025 | 1.2 KiB | 51 | 50 | |
| hvigorfile.ts | D | 06-May-2025 | 222 | 7 | 5 | |
| hvigorw | D | 06-May-2025 | 1.4 KiB | 49 | 28 | |
| hvigorw.bat | D | 06-May-2025 | 2.1 KiB | 79 | 60 | |
| oh-package.json5 | D | 06-May-2025 | 240 | 13 | 12 | |
| ohosTest.md | D | 06-May-2025 | 1.7 KiB | 17 | 13 |
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||||| 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````