新闻详情

新闻详情

首页 / 资讯中心 / 详情

《HarmonyOS 7 精准碰一碰跨设备协作开发实战》06:多设备并发分享、任务隔离与性能优化【鸿蒙心迹】

发布时间:2026/9/27 3:37:46来源:尧图网络
《HarmonyOS 7 精准碰一碰跨设备协作开发实战》06:多设备并发分享、任务隔离与性能优化【鸿蒙心迹】
一台手机同时发给平板、PC、笔记本三台设备。其中PC网络慢会不会把另外两台也拖慢这就是多设备并发要解决的问题。前五篇都是一台设备发给另一台。这一篇升级成一台设备同时发给多台。我之前做过一个测试手机上会议资料同时发给平板A、平板B、PC。结果呢PC网络特别慢传了半天还没传完。平板A本来10秒就能完成结果等了30秒。平板B更惨直接超时失败了。为什么因为我把所有设备的任务放在一个队列里跑。PC那个任务卡住了后面的任务全在等。这就是多设备并发的坑一台设备慢不能影响其他设备。一、每台设备一个独立Session正确的做法是每台目标设备建一个独立的DeviceSession。每个Session自己管自己的任务队列自己的传输状态自己的重试次数自己的统计信息A设备慢没关系它自己慢慢传。B设备正常跑自己的不受影响。二、DeviceSession每台设备独立运行这段代码解决什么问题单设备独立会话。文件session/DeviceSession.ets用途管理单台设备的传输任务接入位置多设备分发时创建classDeviceSession{deviceId:string;deviceName:string;taskQueue:TransferTask[][];status:idle|connecting|transferring|failed|completedidle;successCount:number0;failCount:number0;retryCount:number0;constructor(deviceId:string,deviceName:string){this.deviceIddeviceId;this.deviceNamedeviceName;}// 添加任务addTask(task:TransferTask){this.taskQueue.push(task);}// 处理任务asyncprocessTasks(){this.statustransferring;while(this.taskQueue.length0){lettaskthis.taskQueue.shift()!;try{awaitthis.sendOne(task);this.successCount;}catch(e){this.failCount;console.warn(设备 this.deviceName 任务失败e);}}this.statuscompleted;}}三、多Session调度不要互相等有了多个DeviceSession怎么调度很简单每个Session独立启动不要互相等待。手机同时给三台设备发资料就是创建三个Session每个Session独立跑自己的任务队列。这段代码解决什么问题多设备并发调度。文件scheduler/MultiDeviceScheduler.ets用途调度多设备并发传输接入位置批量分发时调用classMultiDeviceScheduler{privatesessions:Mapstring,DeviceSessionnewMap();// 创建多设备会话createSessions(devices:Array{id:string,name:string}){for(letdevofdevices){letsessionnewDeviceSession(dev.id,dev.name);this.sessions.set(dev.id,session);}}// 给所有设备发任务broadcastTask(task:TransferTask){for(letsessionofthis.sessions.values()){// 每个设备一个任务副本lettaskCopy{...task,id:task.id_session.deviceId};session.addTask(taskCopy);}}// 启动所有会话并行asyncstartAll(){letpromises[];for(letsessionofthis.sessions.values()){promises.push(session.processTasks());}// 等所有完成不互相阻塞awaitPromise.allSettled(promises);console.info(所有设备传输完成);}}四、多设备并发最容易踩的坑第一个坑所有设备共用一个队列。一台设备慢整个队列卡住其他设备都在等。正确做法是每台设备独立队列。第二个坑一台失败全部取消。PC传失败了平板也跟着取消了。不对单台失败不影响其他设备。第三个坑重复任务没去重。用户点了两次全部分发结果每台设备收到两份相同的任务。要做任务幂等性判断。第四个坑内存峰值没控制。三台设备同时传大文件每台都读进内存内存直接涨三倍。要控制每台设备的并发数。第五个坑失败重试不隔离。PC网络不好一直重试占着CPU和网络影响其他设备。重试要限制次数和间隔。第六个坑没有性能统计。哪台设备慢慢在哪传了多少成功率多少没有统计就是黑盒。第六篇总结多设备并发的核心是隔离。每台设备一个独立Session自己的任务队列、自己的状态、自己的重试。一台设备慢或失败不影响其他设备。工程上最容易翻车的是把所有设备的任务放一个队列里一台卡住全部卡死。分开以后用Promise.allSettled并行跑谁慢谁自己等不拖别人。下一篇做工程收尾异常恢复、状态机、资源释放。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

wordpress的文章中可以添加图片吗报价多少钱 2026/9/27 4:18:43

wordpress的文章中可以添加图片吗报价多少钱

WordPress文章加图解步骤实操,告别拖稿一周 改个需求建站公司拖一周?别闹了,这借口太老掉牙。其实很多基础功能,比如给 WordPress 文章添加图片并配合图解步骤,根本不需要外包团队排期。我自己以前也踩过这坑,为了改个首页…

阅读更多 →
东莞网页制作设计避坑指南:5个关键注意事项与实战案例 2026/9/27 4:18:37

东莞网页制作设计避坑指南:5个关键注意事项与实战案例

东莞网页制作设计避坑指南:5个关键注意事项与实战案例 自己不会代码却急着上线官网?在东莞做网页制作设计,别被低价套餐忽悠,这5个注意事项能帮你省下至少50%的冤枉钱。 项目背景与需求:从迷茫到明确…

阅读更多 →
3步搞定江油专业网站建设咨询完整流程防被黑 2026/9/27 4:18:29

3步搞定江油专业网站建设咨询完整流程防被黑

3步搞定江油专业网站建设咨询完整流程防被黑 上周刚帮绵阳一个做建材的老板救火,他官网首页突然挂了满屏的赌博广告,后台密码改了也没用。问了一圈本地同行,有的说重装系统,有的说买高价安全服务,搞得他焦头烂额。这种网站被黑挂马不知道办怎么办的情况…

阅读更多 →
不用手环、无需基站!黎阳之光视频孪生无感定位,破解变电站人员管控痛点 2026/9/27 4:18:23

不用手环、无需基站!黎阳之光视频孪生无感定位,破解变电站人员管控痛点

变电站属于高危电力作业场景,长期以来,很多场站选择UWB人员定位方案来保障检修作业安全。但在实际落地运维中,痛点接踵而至:作业人员忘记佩戴UWB手环就无法管控;手环转借他人,系统无法分辨真实身份&#xf…

阅读更多 →
亲测有效!奶茶外卖打车直接抵 2026/9/27 4:18:10

亲测有效!奶茶外卖打车直接抵

不止奶茶外卖!这些场景用券更值(最低0.01元起) 这张是通用无门槛立减券,只要走支付宝支付的实物类消费基本都能用,不用为了用券硬凑单,推荐几个日常高频又划算的用法:1. 早晚餐 下午茶&#xf…

阅读更多 →
从零搭建小米CyberDog ROS2控制系统:环境、编译与二次开发 2026/9/27 4:17:50

从零搭建小米CyberDog ROS2控制系统:环境、编译与二次开发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉