HarmonyOS鸿蒙Next中编辑软件涉及文件编解码和图像渲染等重计算任务不能放在主线程,如果使用Worker或者Taskpool,如何在引擎和播放器之间共享对象数据?
HarmonyOS鸿蒙Next中编辑软件涉及文件编解码和图像渲染等重计算任务,这部分任务放在主线程肯定不行。 如果使用Worker或者Taskpool,因为播放器需要用到引擎的数据,怎么跟播放器共享对象数据?
这是一个架构问题,希望帮忙分析,最好给出一个例子代码。
处理文件编解码和图像渲染等重计算任务确实不适合放在主线程,因为可能会导致UI卡顿,降低用户体验。 ArkTS目前主要提供两种并发能力支持线程间通信:TaskPool和Worker。 Worker是Actor并发模型标准的跨线程通信API,与Web Worker或者Node.js Worker的使用方式基本一致。 TaskPool提供了功能更强、并发编程更简易的任务池API。其中TaskPool涉及跨并发实例的对象传递行为与Worker一致,还是采用了标准的Structured Clone算法,并发通信的对象越大,耗时就越长。 taskpool 简介
worker 简介:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/worker-introduction-V13
关于数据共享推荐使用Sendable对象 Sendable对象为可共享的,其跨线程前后指向同一个JS对象,如果其包含了JS或者Native内容,均可以直接共享,如果底层是Native实现的,则需要考虑线程安全性。 文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-sendable-V13
尤其请注意Sendable 对象支持的数据类型 地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-sendable-V13#sendable支持的数据类型
如果在多线程涉及到单例的话,请使用进程单例 文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-sendable-module-V13
示例请参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/multithread-develop-case-V13
更多关于HarmonyOS鸿蒙Next中编辑软件涉及文件编解码和图像渲染等重计算任务不能放在主线程,如果使用Worker或者Taskpool,如何在引擎和播放器之间共享对象数据?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,使用Worker或Taskpool处理文件编解码和图像渲染等重计算任务时,可以通过共享内存或消息传递机制在引擎和播放器之间共享对象数据。共享内存允许直接访问同一块内存区域,而消息传递机制则通过序列化和反序列化对象数据来实现跨线程通信。具体实现可使用HarmonyOS提供的SharedArrayBuffer
或MessagePort
等API。