Android平台Java线程池启动耗时.
来源:互联网 发布:软件未响应关不掉 编辑:程序博客网 时间:2024/04/20 13:50
异步任务线程策略
在项目过程, 常用Java线程池来异步完成特定任务, 特别是对于Android手机平台来说.
在具体的实施过程中, 有以下几种策略:
- 来一个新的任务, 启动一个新的线程, 任务结束后线程结束, 简称为 ThreadStart.
- 开启cached线程, 一定时间上实现线程的复用, 免去重复创建线程的问题, 简称为 ThreadCache
- 开启固定数量的线程池, 简称为 ThreadFix
- 开启一个线程池, 预先启动固定大小的线程, 忙时线程数量可随着任务数量增长而增长, 闲时回归到固定大小的数量, 简称为RcThread.
多线程并发任务
对于一些实时性要求较高任务, 选择不同的策略, 会有着不同的耗时.
有着这样的情况, 并发4.5个线程去完成同一个任务, 以提高任务完成的实时性和可靠性, 譬如说到不同的服务器上实时取相同的资源, 以达到快速和可靠的效果.
这个耗时可以分为 本地耗时 + 网络耗时 + 服务器处理耗时. 本文只讨论如何降低本地耗时? 线程池模式下, 两个方面来考虑 , 一个是头一个线程启动耗时, 另外一个最后一个线程的启动耗时(也即连续启动4个线程的耗时).
头一个线程启动耗时
在一个手机上, 运行以下程序:
- ThreadStart模式连续启动4个线程, 采集最先开始运行的线程的启动时间.
- sleep 10 秒钟.
- ThreadCache模式, 连续提交4个任务, 采集最先开始运行的线程的启动时间.
- sleep 10 秒钟
- ThreadFix(4个线程)模式, 连续提交4个任务, 采集最先开始运行的线程的启动时间.
- sleep 10 秒钟
- RcThread(预先启动4个线程)模式, 连续提交4个线程, 采集最先开始运行的线程的启动时间.
- sleep 10秒钟,
- goto step 1, 循环60次.
将会得到以下的结果:
注释: 时间单位为ms, 测试手机为 华为3X.
可见, RcThread预启动模式与ThreadFix模式数据差不多, 数据较平稳, 均值不大, 其他两种尖峰数据较多, 不够平稳, 且均值较大.
最后一个线程启动耗时
在一个手机上, 运行以下程序:
- ThreadStart模式连续启动4个线程, 采集最后一个开始运行的线程的启动时间.
- sleep 10 秒钟.
- ThreadCache模式, 连续提交4个任务, 采集最后开始运行的线程的启动时间.
- sleep 10 秒钟
- ThreadFix(4个线程)模式, 连续提交4个任务, 采集最后开始运行的线程的启动时间.
- sleep 10 秒钟
- RcThread(预先启动4个线程)模式, 连续提交4个线程, 采集最后开始运行的线程的启动时间.
- sleep 10秒钟,
- goto step 1, 循环60次.
得到以下结果:
注释: 时间单位ms, 测试手机为 华为3X.
可见, RcThread预启动模式与ThreadFix模式数据差不多, 数据较平稳, 均值不大, 其他两种尖峰数据较多, 不够平稳, 且均值较大.
0 0
- Android平台Java线程池启动耗时.
- Android中启动线程来进行耗时操作
- Android应用启动耗时
- android 开启线程查询数据,耗时操作
- android开发 用线程进行耗时操作,统一处理
- iOS 启动耗时统计
- Java(线程)Android线程池
- Android平台下线程池管理工具-ThreadPoolHelp
- Java(Android)线程池
- Java(Android)线程池
- Java(Android)线程池
- Java(Android)线程池
- Java(Android)线程池
- Java(Android)线程池
- Java(Android)线程池
- Java(Android)线程池
- Java(Android)线程池
- Java(Android)线程池
- Linux内核学习方法
- Crossing River(贪心+模拟)
- 75道程序员逻辑思维题
- Android电源管理之一:基础概览
- STL 交并补差
- Android平台Java线程池启动耗时.
- STL-序列式容器
- Oracle RAC备份与恢复
- new : HTML5 中的新属性
- 二分查找(边界问题)
- ruby-数据类型
- 使用autotools自动生成makefile
- Qt-----实现Tcp通信
- c++不同继承方式的访问权限