目前系统的多线程内存占用大,每个线程需要一个ArkTs引擎,意味着更多的内存占用。如何解决应用需要避免开辟过多线程,并发处理任务数量受限,无法充分发挥设备性能的问题?

北向实践与赋能 显示全部楼层 发表于 2024-3-8 17:17:56

目前系统的多线程内存占用大,每个线程需要一个ArkTs引擎,意味着更多的内存占用。如何解决应用需要避免开辟过多线程,并发处理任务数量受限,无法充分发挥设备性能的问题?

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

北向实践与赋能

沙发 发表于 2024-3-8 17:18:37

目前系统的多线程内存占用大,每个线程需要一个ArkTs引擎,意味着更多的内存占用。如何解决应用需要避免开辟过多线程,并发处理任务数量受限,无法充分发挥设备性能的问题?

原理澄清 当前ArkTS创建线程(worker)会创建一个新的ArkTS引擎实例,会占用额外的内存。 同时,ArkTS提供了TaskPool并发API,类似GCD的线程池能力,可以执行任务,而且不需要开发者进行线程生命周期管理。Task会被调度到有限数量的工作线程执行,多个task会共享这些工作线程(ArkTS引擎实例),系统会根据负载情况扩容/缩容工作线程的数量,充分发挥硬性性能

解决方案 因此针对需要大量线程的问题,应用的开发建议如下: 将多线程任务转变为并发任务,通过TaskPool分发执行 I/O型任务不需要单独开启线程,而是在当前线程(可以是TaskPool线程)执行 少量需要常驻的CPU密集型任务,采用Worker,并且需要控制在8个及以下。

参考链接: https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/taskpool-vs-worker-0000001632849934-V3

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部