HarmonyOS业务场景相关多线程的应用问题
请问多线程场景消息队列如何设计,消息队列中存储的字节数组,怎么解决同步竞争问题?
1. 复杂业务场景下有多个线程参与工作,请问如何协调资源调度?
场景描述:
1. 摄像机设备列表最大可以添加64个IP监控摄像机,每个摄像机会开启线程不断发送心跳检测在线状态,当检测到在线时,检测心跳的线程会挂起,另外开启新的线程通过私有协议与摄像机进行连接,同一时间可能有几十个线程在参与工作,这种情况要怎么进行资源调度,请问最佳的解决方案是什么?
2.查看单台监控摄像机直播时,可能有五个以上的工作线程会同时参与,查看硬盘录像机的多台摄像机不同通道直播画面时,同时会有几十个线程参与工作。
a线程:控制命令消息发送。
b线程:控制命令消息接收。
c线程:视频流处理。
d线程:直播视频录制。
e线程:语音对讲。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 多线程并发相关问题
232浏览 • 1回复 待解决
HarmonyOS 线程相关问题
463浏览 • 1回复 待解决
HarmonyOS关于多线程的问题
433浏览 • 1回复 待解决
HarmonyOS 多线程锁问题
448浏览 • 1回复 待解决
HarmonyOS 运行时AOP方案,多线程场景如何处理?
136浏览 • 1回复 待解决
HarmonyOS中的多线程和Android的多线程有何区别?
124浏览 • 0回复 待解决
#鸿蒙通关秘籍#在多线程场景如何选择合适的并发策略?
52浏览 • 1回复 待解决
HarmonyOS 多线程写法限制
131浏览 • 1回复 待解决
在多线程的场景下EGL同时操作一块buffer进行绘制
432浏览 • 1回复 待解决
EGL绘制是否支持多线程?如何在多线程的场景下同时操作一块buffer进行图形绘制
1983浏览 • 1回复 待解决
OceanBase用在了哪些业务场景?
5033浏览 • 1回复 待解决
HarmonyOS多线程使用?
163浏览 • 0回复 待解决
HarmonyOS 数据库多线程操作
161浏览 • 1回复 待解决
HarmonyOS是否支持多线程?
109浏览 • 0回复 待解决
业务数据频繁更新的场景 用redis是否合适?
2751浏览 • 1回复 待解决
在多线程并发场景中,如何实现安全访问同一块共享内存
2020浏览 • 1回复 待解决
ArkTs多线程方案如何保证线程安全
2559浏览 • 2回复 待解决
HarmonyOS 混淆相关场景咨询
39浏览 • 1回复 待解决
如何使用taskpool实现多线程
1113浏览 • 1回复 待解决
HarmonyOS应用打包CPU架构相关问题?
105浏览 • 0回复 待解决
如何通过卡片点击实现业务登录场景
1738浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙应用中如何使用UI主线程调用多线程方法?
54浏览 • 1回复 待解决
多线程中EGL如何共享Context
386浏览 • 1回复 待解决
什么是系统的多线程模型
372浏览 • 1回复 待解决
HarmonyOS Appstorage支持多线程间的状态共享吗?
262浏览 • 1回复 待解决
相关问题答复如下:
1、多线程场景消息队列如何设计。这里不是很理解,伙伴可以具体描述下要实现的效果么,如果只是线程间通信,可以使用emitter,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/itc-with-emitter-V5
2、消息队列汇总存储的字节数组,怎么解决同步竞争问题。本质应该是对共享资源的操作吧,当前两种方式:
1)、使用SharedArrayBuffer达到共享内存的目的,但是需要通过原子操作保证其同步性,参考:TaskPool:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkts-kit-V5#section1993413110376worker:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkts-kit-V5#section18447333151614
2)、可使用Sendable装饰Class,实例中存储数据,Sendable装饰器支持SendableClass序列化。对象分配在各自的虚拟机内存空间,不存在竞争访问,不同线程可以同时读写,可参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/arkts-utils/arkts-sendable.md,SharedArrayBuffer使用麻烦些,但资源占用比SendableClass要小一些。
3、问题场景下的资源调度。其实就是指线程调度吧,TaskPool和Worker都不需要关注调度,会由系统来自行调度,但TaskPool可以设置任务优先级,会有一定的干预调度能力。但各有各的限制,详细对比可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/taskpool-vs-worker-V5
按线程数量,应该是要使用TaskPool,但相应限制也要注意:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/taskpool-introduction-V5
问题方案如下:
1、多线程场景消息队列如何设计。按伙伴您的场景,每个摄像机和应用设备(例如手机)之间通信的线程都是独立的,又因为线程之间上下文是独立的,应该不存在摄像机之间消息队列的冲突,而某一个摄像机和应用设备之间的消息,可以在线程内收到后直接处理。
2、时长远远超过3分钟,这样就不能使用TaskPool,而ThreadWorker的数量上限为8个。已支持TaskPool长时任务,参考:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkts/js-apis-taskpool.md#longtask12