• Lv0
    粉丝0

积分4 / 贡献0

提问1答案被采纳0文章0

作者动态

    Openharmony 多线程worker使用太繁琐,有没有其他多线程的方式? 精华

    zhangxu 显示全部楼层 发表于 2024-2-19 14:11:11

    多线程的使用场景

    在开发过程中难免会遇到耗时的任务或者复杂的计算,但为了保证主线程(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类型的Module支持使用Worker,Library类型的Module不支持使用Worker。

    以上是我对worker的理解,针对多线程问题有没有更好的方式去替代呢?

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

    精彩评论6

    深开鸿_王石

    沙发 发表于 2024-2-23 14:53:00
    看看taskpool

    zhangxu

    发表于 2024-2-26 08:38  IP属地: - 中国广东省广州市 中国电信IDC

    回复 深开鸿_王石: taskpool也有局限性,不能序列号自定义对象以及方法,而且必须是ets文件

    深开鸿_王石

    发表于 2024-2-26 16:51  IP属地: - 中国江苏省 中国移动IDC

    回复 zhangxu: 你想写c的?

    【2 条回复】

    论坛小助手 官方账号

    板凳 发表于 2024-2-23 16:55:12
    推荐使用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  IP属地: - 中国广东省广州市 中国电信IDC

    回复 论坛小助手: taskpool也有局限性,不能序列号自定义对象以及方法,而且必须是ets文件

    【1 条回复】

    csdn-qq8864

    地板 发表于 2024-3-6 09:26:37
    【线程模型及线程间通信 Emitter、Worker和TaskPool介绍】https://blog.csdn.net/yyz_1987/article/details/135885467?spm=1001.2014.3001.5502

    目前已知的就这两种方法了吧,推荐taskpool,但希望taskpool功能能更强大些!
    共6 条回复,点击查看

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

    返回顶部