Android线程调度机制
2015-07-30 15:06
423 查看
[译]Android线程调度机制
2014-2-24阅读789 评论0在Android Weekly上看到了一篇关于Android线程调度的文章,感觉挺不错的,试着将其翻译了一下,
原文地址http://www.androiddesignpatterns.com/2014/01/thread-scheduling-in-android.html。
这篇文章是关于Android中线程是如何调度的,以及怎么样显示设置线程优先级保证应用程序在
多个线程在后台运行时保持响应。
线程调度是指操作系统负责决定哪些线程应该运行,以及什么时候,运行多长时间。
Android的线程调度使用两个主要因素来决定如何在整个系统调度线程:nice values和cgroups。
[b]Nice values
类似于在Linux的完全公平调度策略中使用,在Android中nice values被用在线程优先级上。
高nice values(低优先级)的线程运行次数少于低nice values(高优先级)的线程。
最重要的两个优先级是default和background。简单来说,线程优先级应该和该线程期望完成的工作量相反。
线程做的工作越多,它的优先级应该越小,以便它不会饿死系统。
所以,UI线程(Activity的主线程)通常是default优先级,
然而后台线程(AsyncTask的线程)通常是background优先级。
Nice values在理论上是重要的,因为他们减少了后台工作线程中断UI的可能性。
在实践中,但是,只有它们并不足够。例如,假设存在20个后台线程和一个单独的执行UI的前台线程。
虽然他们每个的优先级很低,但是合起来20个后台线程将影响前台线程的性能,结果损害了用户体验.
因为在任何时刻几个应用程序可能已经有等待运行的后台线程,Android OS必须以某种方式处理这些问题。
Cgroups
为了处理这个问题,Android系统使用Linux cgroups强制执行更严格的foreground、background调度策略。
background优先级的线程被隐式的移动到了background cgroup,它们被限制只有很小的几率利用CPU
如果在其它组中的线城是忙的。这种分离允许后台线程执行一些任务,而不会对用户可见的前台线程
产生较大的影响。
除了自动将低优先级线程分配给background cgroup,Android也将当前不在前台运行的应用程序的
线程移动到background cgroup中。将应用程序线程自动分组保证了当前前台线程总是优先的,
无论在后台运行的应用程序有多少。
设置线程优先级:Process.setThreadPriority(int)
大多数情况下,Android APIs已经为工作线程分配了background优先级(例如,HandlerThead
和AsyncTask)。在主UI线程中,实例化的Threads和ExecutorServices会继承default、
foreground优先级,可能会影响或损害应用的性能。在这些情况中,你应该记得在线程运行
之前设置线程的优先级。这样做很简单,如下面的示例所示:
<div>new Thread(new Runnable() {</div> @Override <div> Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);</div> public void run() { // ... <div> }).start();</div><div> }</div>由于Android是基于Linux内核的,所以要想深入Android的线程调度机制,还需要去学习
Linux的相关知识。http://m.blog.csdn.net/blog/tianzhihen_star/19825345
[/b]
相关文章推荐
- Android adb获取event
- Android MediaPlayer 和 NativePlayer 播放格式控制
- iOS 与 Android 生命周期对比
- Android官方命令深入分析之绘制9-patch
- Android签名工具keytool的使用
- Android官方命令深入分析之绘制9-patch
- Android—开发自学历程(4)- Broadcast
- android如何打包成jar包
- Android资源命名规范
- Android自定义数值增减控件
- Android动画其实并不难
- Android ORM 框架之 ActiveAndroid
- 爱加密加密Android apk 使用步骤
- Android Volley学习1---简介及基本用法
- 微软发布独立Android模拟器 为开发者提供测试
- 移动开发-Android-tab效果之Fragment-1
- Android 分析工具 APKAnalyser
- android开发中有EditText,当输入时输入法会把底部的导航栏顶上去。如何解决?
- 【分享】迅为iTOP4412开发板-Android系统屏幕旋转设置
- 【转】Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果