145 Star 1.4K Fork 1.7K

OpenHarmony/applications_app_samples

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

N-Body模拟程序

介绍

在本示例中,使用ArkTS编程语言开发了业界编程语言基准测试项目Benchmarks Game中的N体问题模拟程序,实现类木星体轨道计算。

本示例用到了@ohos.taskpool@ohos.worker 接口。示例中的程序可以用于AOT(Ahead Of Time)等性能测试。

效果预览

主页 计算中 重复点击 计算结果

使用说明

1.点击按钮Calculate By TaskPool,会从任务池创建一个任务,进行N-Body计算。

2.点击按钮Calculate By Worker,会创建一个Worker,进行N-Body计算。

工程目录

entry/src/main/ets
|---/entryability
|   |---EntryAbility.ts                  // 封装整个模块启用
|---/model
|   |---CalculateUtil.ets                // worker和taskpool都在这里调用            
|   |---NBody_ETS_6.ets                  // 天体轨道计算
|---/pages
|   |---Index.ets                        // 首页
|---/utils
|   |---Constants.ets                    // 封装只读常量
|   |---Logger.ets                       // 封装整个日志
|---/worker
|   |---CalculateWorker.ts               // worker线程        
                                            

相关概念

AOT(Ahead Of Time),即预先编译,在应用程序运行前,将代码预先编译成高性能机器代码,避免在运行时的编译性能消耗和内存消耗,让程序在首次运行就能通过执行高性能机器码获得性能收益。

具体实现

  • 使用TaskPool开启子线程运行,计算500万次时间推移天体运行轨道,源码参考CalculateUtil.ets

    • 通过调用computeNBodyByTaskPool()创建一个task任务,并向taskpool线程池派发子线程任务。
    • 等待子线程执行任务computeTask(),计算完成后再把结果返回主线程。
  • 使用Worker开启子线程运行,计算5000万次时间推计算移天体运行轨道,源码参考CalculateUtil.ets

    • 通过调用computeNBodyByWorker()创建一个worker线程,把要计算的时间推移量发送给worker线程。
    • 等待worker线程调用computeTask()计算完成后再把结果返回主线程。
  • computeTask()完成具体计算任务,源码参考NBody_ETS_6.ets

    • offsetMomentum() 建立孤立系统的动量守恒。
    • advance() 更新天体在按指定的时间变化后的位置信息。
    • energy() 判断系统计算前后机械能守恒。

相关权限

不涉及。

依赖

不涉及。

约束与限制

1.本示例已适配API version 10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0Release) 。

2.本示例需要使用DevEco Studio 版本号(4.0Release)及以上才可编译运行。

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo code/Performance/ArkRuntime/NBody/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openharmony/applications_app_samples.git
git@gitee.com:openharmony/applications_app_samples.git
openharmony
applications_app_samples
applications_app_samples
master

搜索帮助