OpenHarmony开发者论坛
标题:
Openharmony 多线程worker使用太繁琐,有没有其他多线程的方式?
[打印本页]
作者:
zhangxu
时间:
2024-2-19 14:11
标题:
Openharmony 多线程worker使用太繁琐,有没有其他多线程的方式?
[md]**多线程的使用场景**
在开发过程中难免会遇到耗时的任务或者复杂的计算,但为了保证主线程(UI线程)不被阻塞,通常会把这些任务或者计算方法使用多线程处理。我本想实现一个动态人脸识别的程序,通过人脸检测的API不断对摄像头的视频流进行检测,并将人脸的所在位置实时的绘制在canvas上,在这同时也需要使用人脸识别的API来判断我是谁?也将识别的结果绘制出来。由于人脸识别的API调用耗时比较久(大概1S左右),但不能影响人脸追踪的速度,因此人脸识别的API和人脸检测 的API不能都是主线程上去实现。
**使用多线程worker API后存在的问题**
我尝试将人脸识别的API 放到一个worker中去实现,可以解决上述上问题,但worker的局限性比较大,总结的缺点如下:
* worker线程是通过发送消息这种机制和主线程通讯的,主线程传输过来的数据都要进行二次封装,worker线程接收的数据又要进行二次解析,不像android中直接使用Thread 或者使用线程池这么方便。
* 序列化支持类型包括:除Symbol之外的基础类型、Date、String、RegExp、Array、Map、Set、Object(仅限简单对象,比如通过"{}"或者"new Object"创建,普通对象仅支持传递属性,不支持传递其原型及方法)、ArrayBuffer、TypedArray。不支持复杂的数据类型(例如嵌套对象)
* 如果使用worker来调用人脸识别的API,参数也要通过发消息进行传递,这种方式编写的代码不太规范,逻辑不清晰。
* 序列化传输的数据量大小限制为16MB,较大的图片无法传输。
* Worker创建后需要手动管理生命周期,且最多同时运行的Worker子线程数量为8个。
* [Ability类型](
https://docs.openharmony.cn/page ... structure-stage.md/
)的Module支持使用Worker,[Library类型](
https://docs.openharmony.cn/page ... structure-stage.md/
)的Module不支持使用Worker。
以上是我对worker的理解,针对多线程问题有没有更好的方式去替代呢?
[/md]
作者:
深开鸿_王石
时间:
2024-2-23 14:53
看看taskpool
作者:
论坛小助手
时间:
2024-2-23 16:55
推荐使用taskpool,创建和使用更加便捷,无需关注生命周期
https://gitee.com/openharmony/do ... js-apis-taskpool.md
API文档
https://gitee.com/openharmony/do ... skpool-vs-worker.md
taskpool对比worker
https://gitee.com/openharmony/do ... ion-dev/arkts-utils
作者:
zhangxu
时间:
2024-2-26 08:38
回复
深开鸿_王石
: taskpool也有局限性,不能序列号自定义对象以及方法,而且必须是ets文件
作者:
zhangxu
时间:
2024-2-26 08:38
回复
论坛小助手
: taskpool也有局限性,不能序列号自定义对象以及方法,而且必须是ets文件
作者:
深开鸿_王石
时间:
2024-2-26 16:51
回复
zhangxu
: 你想写c的?
作者:
csdn-qq8864
时间:
2024-3-6 09:26
【线程模型及线程间通信 Emitter、Worker和TaskPool介绍】
https://blog.csdn.net/yyz_1987/article/details/135885467?spm=1001.2014.3001.5502
目前已知的就这两种方法了吧,推荐taskpool,但希望taskpool功能能更强大些!
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5