异步任务队列的两种处理方法


先对这里的异步任务做下解释: 这里的意思是,该任务有几种状态,创建,等待,运行,结束;其中等待是因为,该任务要正常运行,需要其他线程(或进程)提供相应的条件(或触发事件),然后才会运行。    针对这种要异步处理(等待)的任务队列管理模式,个人理解有两种处理方法。


第一种: 

也是最常规的一种,定义一个队列,创建任务,然后push到队列里面去,每个任务创建之后,(或接到开启命令)启动等待(定时器),等待所需条件(或事件),如果等待,那么就正常运行,然后结束,如果超时,那么就直接结束。  

这种方法的缺点就是,必须要有等待(定时器),这会消耗资源,影响效率。

优点就是不会有任务丢失。


第二种:

定义一个定长(较大)的任务数组, 任务全部初始化为创建状态,当有一个任务来的时候,那么就查询数组中free的任务obj,注意这里查询,要从上一个已经使用的index往后查,(比如,现在已经存了3个有效任务,每次使用一个新的,都会记录index, 那么index应该等于2,那么要查找未被使用的任务obj,这里应该从index=3开始查,这样就不会把之前的任务冲掉) ,查的时候,只要状态不是在运行就可以。   注意:这里其实已启用的任务,可能是出于等待状态的,那么当它的运行条件(事件)来的时候,那么就要从之前已经存的启动任务中去找(这里要从记录的index往前找,因为我们记录的顺序是从前往后的,前面的都是在等待或者已经运行了的),当找到后,就将任务状态改为运行。

这里写的有些含糊,但是只要细细理解,应该就能明白,这其实就是一个循环利用一开始就申请好的数组队列。

这中方法的优点就是 不用启用定时器,节省资源,效率高,且不会有僵尸任务(比如方法一种如果没有定时器,那么就有可能出现一直在等待的任务)出现。 缺点就是,最多只能有一开始创建的数组大小个任务并行(这个缺点,可以通过变长数组,或vector解决),还有一个缺点就是,有可能会有前面的等待任务,误被当做free任务obj而被冲掉,所以这种方法适合那种快速响应的异步任务(就是它创建了,它对应的启动运行条件很快就会来,等待时间很短)。



两种方法各有优缺点,需根据不同情况选择。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值