任务调度框架(多任务、动态优先级调度)

针对APP内多个业务模块注册监听状态变更导致的问题,提出一种基于线程池技术和优先级概念的框架设计方案,以解决任务扎堆执行引发的UI线程繁忙、丢帧卡顿等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

日常开发的过程中,对于某个状态变更的监听,一般都是使用注册listener的方式,在状态变更的时候,遍历注册的listener一一进行通知,这种情况,经常会出现一些任务扎堆执行的情况,譬如登录完成(或者其他类似的通知监听),如果一个APP里面有很多的业务,每个模块都注册了监听,在登录状态变更的时候,会去获取更新数据或者干一些业务相关的逻辑。这种情况下这种实现方式会存在以下几个问题:

1、通知无优先级概念,A场景触发的登录,并不能优先处理A场景的状态变更;
2、导致瞬间UI线程繁忙,极端情况下会导致丢帧、卡顿;
3、通知之后的业务执行不可控,出现问题的时候,很难定位是什么原因导致的。

因此想写一个框架来解决这种问题。

职责

1、负责所有注册任务的调度,
2、利用线程池技术,增加吞吐量,让任务都能够尽快执行;
3、有优先级概念,A触发的场景,优先处理A场景的任务;
4、解决扎堆执行可能导致的丢帧、卡顿问题。

怎样做?

1、任务存在优先级:priority
2、支持不同的调度策略
3、支持动态更改优先级;

如果任务是一次性的,那在一开始添加任务的时候,我们根据不同的业务重要优先级确定任务的优先级即可(譬如启动完成)。但还有另外一种类型的任务,是在运行过程中会多次执行的,由于任务是一开始就添加的,需要在其他的场景再次进行sort,怎样做才能够让任务动态的优先级动态变更呢?

一开始注册的时候,按照时间戳作为优先级的大小;然后在A场景开始触发任务调度的时候,更新A场景对应的任务的priority为当前时间。这样子A场景对应的任务就可以在新一轮调度中,最高优执行。

4、任务的执行,可以在调度框架的线程池里面执行。
5、任务的执行,能够获取到对应的执行时间,进行监控
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值