LiteHttp 第十节:异步并发与调度策略

官网: http://litesuits.com

QQ群: 大群 47357508,二群 42960650

本系列文章面向android开发者,展示开源网络通信框架LiteHttp的主要用法,并讲解其关键功能的运作原理,同时传达了一些框架作者在日常开发中的一些最佳实践和经验。

本系列文章目录总览: http://blog.csdn.net/ko33600/article/details/49367409


lite-http 的异步执行和任务调度主要借助于 SmartExecutor 来完成的,关于 SmartExecutor 的介绍和使用后边会有专门的文章来讲解。

lite-http 因此具备 SmartExecutor 的全部特性:

可定义核心并发线程数,即同一时间并发的请求数量。

可定义等待排队线程数,即超出核心并发数后可排队请求数量。

可定义等待队列进入执行状态的策略:先来先执行,后来先执行。

可定义等待队列满载后处理新请求的策略:

  • 抛弃队列中最新的任务
  • 抛弃队列中最旧的任务
  • 抛弃当前新任务
  • 直接执行(阻塞当前线程)
  • 抛出异常(中断当前线程)

lite-http拥有一个独立的 SmartExecutor 的实例,在一个 App 中 SmartExecutor 可以有多个实例,每个实例都有独立核心和等待线程数指标,每个实例都有独立的调度和满载处理策略,但它们 共享一个线程池。这种机制既满足不同木块对线程控制和任务调度的独立需求,又共享一个池资源。独立又共享,最大程度上节省资源,提升性能。

心急的朋友又要喊了: shut up, show me the code!

// Concurrent and Scheduling

HttpConfig httpConfig = liteHttp.getConfig();
// only one task can be executed at the same time
httpConfig.setConcurrentSize(1);
// at most two tasks be hold in waiting queue at the same time
httpConfig.setWaitingQueueSize(2);
// the last waiting task executed first
httpConfig.setSchedulePolicy(SchedulePolicy.LastInFirstRun);
// when task more than 3(current = 1, waiting = 2), new task will be discard.
httpConfig.setOverloadPolicy(OverloadPolicy.DiscardCurrentTask);

上面的代码对lite-http进行了并发方面的参数设置:

核心并发数为 1
等待队列数为 2
调度采用 后进先执行 策略
满载时采用 抛弃新任务 策略

然后测试:

for (int i = 0; i < 4; i++) {
    liteHttp.executeAsync(new StringRequest(url).setTag(i));
}

// submit order : 0 -> 1 -> 2 -> 3
// task 0 is executing,
// 1 and 2 is in waitting queue,
// 3 was discarded.
// real executed order: 0 -> 2 -> 1

上面的代码按顺序一次投入了四个请求,那么:

投入任务顺序:0 -> 1 -> 2 -> 3
任务 0 立即执行
任务 1 和 2 在排队,按预定策略 2 后进,将先执行
任务 3 因为队列满载,按预定策略抛弃掉
实际执行顺序:0 -> 2 -> 1

对于 SmartExecutor,不论多少个实例,其控制指标和策略独立,始终共享一个池,避免掉多余开销。

理论上,一个 App 只创建一个线程池 就足够了,但是现在框架众多,有的独立精悍,有的功能众多,还是要提醒开发者,选用的框架最好知根知底、深入了解。不清楚里面什么机制,更是控制不了就会尴尬,到头来根本不知道自己的 App 里面有几个线程池。

开发者在构建自己的池子时要注意清闲时活跃线程不要多持,最好不要超过CPU数量,注意控制排队和满载策略,大量并发瞬间起来也能轻松应对。

另外,同时并发的线程数量不要过多,最好保持在CPU核数左右,过多了CPU时间片过多的轮转分配造成吞吐量降低,过少了不能充分利用CPU,并发数可以适当比CPU核数多一点没问题。

好了,本节先将这么多,更多并发姿势在关于 SmartExecutor 的文章里分享。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值