Flutter多并发任务处理
Liux
发布于 未知 2022-10-31 · 973浏览

        在开发过程中,多并发任务对于开发来说是个老生常谈的问题,尤其对于后端童鞋来说。然而相对于前端,这个知识点似乎极少触及,或者在相对高级的代码框架里已经弱化了相应概念。什么是并发呢?通俗点说就是,要求大脑在同一时刻同时处理多个活动,简而言之一心多用,普通人一心二用已经是极限。但对于多并发来说,可能会要求你右手写字、左手玩魔方、右脚踢球、左脚颠球,甚至还得同时跟人侃侃而谈,这显然不是人类所能完成的。同样对于机器来说也有瓶颈。

        恰巧不巧,在新的开发任务中就触及到了此类需求。由于从原生App转战Flutter,多并发相对薄弱,甚至于在从前的开发任务中几乎可以忽略这一存在,以至于到了现有开发任务中避无可避的得着手解决这个问题,怎么解决呢?减少并发量,递归,队列。由于本身的知识局限性,不会做其他高深,高效的算法,但对于现有业务来说,是绰绰有余的。

      先简单说一下需要解决的问题。由于涉及到图片上传,尤其是大批量图片上传,在不人为干预的情况下,系统默认把这个N次的任务并发处理,这就导致了一些问题的出现。首当其冲的是磁盘读取,大量图片读取导致存储通道堵塞、大量图片上传又导致网络带宽堵塞、其次还有底层的图片转码解码过程更进一步增加了CPU的压力,导致这个功能很明显的卡,几近于无法使用。

       解决思路呢,先定义一个队列,其实就是一个List,在有上传任务产生的时候先添加到这个队列,同时去队列顶端的任务执行doTask操作,这里需要两个常量,一个标记是否任务中,一个标记队列任务数,分别用于是否执行下一个任务及是否终止队列。当顶端任务执行完毕,通知队列当前任务完成,通知次任务移除队列,标记任务结束,执行下一次doTask,这就是递归。两个变量保障了添加任务和执行任务可以 同步进行,且大大的保障了前端的体验。但以此而来牺牲了什么呢?首先牺牲了上传速度,由于能力有限,无法探知具体的性能阀值是多少,就无法去定义一个并发数,目前就是单一任务处理,一张一张上传。

    拓展,上面提到了并发数,确实可以考虑增加并发数,比如从一个任务增加到2-3个,在测试条件允许的情况下,看一下此功能能正常适配多少机型,在性能及上传体验上做一个折中权衡。

Liux
App发现问题可以直接向我反馈
浏览 973
相关推荐
最新评论
赞过的人
评论加载中...

暂无评论,快来评论吧!