HarmonyOS Promise & taskpool使用问题
关于Promise的使用我们存在以下问题和疑问。
1、Promise 下去调用 async ,它的耗时明显比UI线程调用还要长很多,请问这是怎么回事,是否是个bug。
示例代码:
async initDb(){
let startTime = Date.now()
await db.init()
let now = Date.now()
LogUtils.info(TAG,"耗时:"+(now-startTime))
}
- 主线程运行initDB耗时:30ms
- Promise里耗时运行耗时:105ms
2、当数量较大的Promise同时启动,它的原理是怎么样的,对性能或者主线程的渲染会有什么影响,我们测试了一下它似乎是按顺序执行的,是否有线程池的概念,我们打印了执行方法,它并不是主线程。
3、taskpool下调用Promise和主线程调用Promise有什么区别。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS关于异步Promise的使用问题
339浏览 • 1回复 待解决
taskpool 执行的 async 函数和普通返回 promise 函数的一些差异问题
1929浏览 • 1回复 待解决
想请问一下Promise的实现原理,以及Promise和TaskPool/Worker有什么区别呢?
151浏览 • 1回复 待解决
taskpool 使用问题,有人知道吗?
833浏览 • 1回复 待解决
HarmonyOS taskpool使用crash
1268浏览 • 2回复 待解决
promise怎么写?http封装时使用promise报错,去除promise正常,但是一加就都变红
53浏览 • 1回复 待解决
HarmonyOS 关于taskpool的问题
118浏览 • 1回复 待解决
关于HarmonyOS Promise机制
200浏览 • 1回复 待解决
HarmonyOS taskpool数据传输问题
354浏览 • 1回复 待解决
HarmonyOS TaskPool使用首选项报错
310浏览 • 1回复 待解决
JS中如何使用Promise和async await
539浏览 • 1回复 待解决
HarmonyOS 使用taskPool处理耗时操作,能否使用箭头函数
263浏览 • 1回复 待解决
使用Promise实现一种串行调用方式
946浏览 • 1回复 待解决
taskpool使用 ,谁有好的方案?
634浏览 • 1回复 待解决
如何使用taskpool实现多线程
1012浏览 • 1回复 待解决
TaskPool里面是否可以使用EventHub
1693浏览 • 1回复 待解决
openharmony arkui taskpool @concurrent装饰器如何使用
4962浏览 • 4回复 待解决
鸿蒙的promise要怎么写
7308浏览 • 3回复 待解决
Promise 与 Async/Await 的比较
334浏览 • 1回复 待解决
HarmonyOS TS文件可以使用taskpool,但是没办法用@Concurrent
247浏览 • 1回复 待解决
使用taskPool实现动态查询刷新ListView中局部信息
599浏览 • 1回复 待解决
如何使用TaskPool在子线程调用对象成员函数
263浏览 • 0回复 待解决
使用taskpool实现多线程时,如何实现内存共享
2108浏览 • 1回复 待解决
HarmonyOS 如何使用TaskPool进行异步IO,同时保证文件写入是顺序的
350浏览 • 1回复 待解决
HarmonyOS taskpool线程数量控制
332浏览 • 2回复 待解决
Promise提供异步并发能力,异步代码会被挂起并在之后继续执行,同一时间只有一段代码执行,适用于单次I/O任务的场景开发,例如一次网络请求、一次文件读写等操作。
HarmonyOS 的Promise任务可以理解为类似协程执行,Promise会阻塞主线程,所以在主线程中执行会比在Promise中执行耗时更短。
任务池(TaskPool)作用是为应用程序提供一个多线程的运行环境,降低整体资源的消耗、提高系统的整体性能,一般用于处理耗时的计算任务或其他密集型任务,TaskPool支持开发者在主线程封装任务抛给任务队列,系统选择合适的工作线程,进行任务的分发及执行,再将结果(结果是一个Promise对象)返回给主线程。
TaskPool偏向独立任务(线程级)维度,超长任务(大于3分钟)会被系统自动回收;而Worker偏向线程的维度,支持长时间占据线程执行。
异步处理操作主要有Promise、Work线程、TaskPool任务池三种方式。
HarmonyOS应用中每个进程都会有一个主线程,除主线程外,还有一类与主线程并行的独立线程Worker,主要用于执行耗时操作,最多可以创建7个Worker。
一般情况下,如果调用的API有异步接口,不是特别耗时,不阻塞程序后续执行,可使用Promise进行异步操作。
若操作非常耗时,可创建Worker处理耗时操作。
TaskPool主要是为应用程序提供一个多线程的运行环境,不建议在任务中执行阻塞操作,特别是无限期阻塞操作,长时间的阻塞操作占据工作线程,可能会阻塞其他任务调度,影响应用性能。
更多异步和并发方面资料您请参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/2_2_u5e76_u53d1-0000001774279762-V5