Android中进程线程调度的命令之cgroups
2015-12-22 14:14
323 查看
做Android开发的同学们,了解cgroups的同学其实不多,cgroups是什么意思呢,在操作系统中有着什么样的作用,以及Android中的cgroups有哪些,各有什么用呢,下面将做一个简单介绍。
在Android中,一个应用(进程)既可以由apps切换到bg_non_interactive,也可以切换回来。
如何确定进程的cgroups
其实确定过程也很简单,总共分三步。
第一步,进入已经root的Android设备终端
第二步,目标应用的进程id,这里以我们的demo程序(包名为com.droidyue.androidthreadschedule)为例。得到的进程id为22871
第三步,利用进程id查看其所在的cgroups
通过以上三步,我们就能把大象关冰箱里,我们就能得到进程所在的cgroups分组。
利用cgroups我们可以做什么
其实对于一般应用来说,能做的事情少之又少。对于有需要的应用可以使用Service.startForeground方法来获取更多的CPU资源,但并不建议盲目去这样做,还是要根据自身应用需要实现。
更深入的了解,请移步技术小黑屋。
定义
下面的引用为维基百科的cgroups的定义cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。
cgroups在Android中的应用
在Android中也存在cgroups,涉及到CPU的目前只有两个,一个是apps,路径为/dev/cpuctl/apps。另一个是bg_non_interactive,路径为/dev/cpuctl/apps/bg_non_interactive,由于Android中只有这两个cgroup,也就是说apps分组中的应用可以利用95%的CPU,而处于bg_non_interactive分组中的应用则只能获得5%的CPU利用率。在Android中,一个应用(进程)既可以由apps切换到bg_non_interactive,也可以切换回来。
Activity
当一个Activity处于可见的状态下,那么这个应用进程就属于apps分组。Service
当Service调用startForeground方法后,那么这个应用进程则是归类于apps分组Notification.Builder builder = new Notification.Builder(this); builder.setContentTitle("Title"); Notification notification = builder.build(); startForeground(notification.hashCode(), notification);
如何确定进程的cgroups
其实确定过程也很简单,总共分三步。
第一步,进入已经root的Android设备终端
11:10 $ adb shell root@htc_m8tl:/ # su root@htc_m8tl:/ #
第二步,目标应用的进程id,这里以我们的demo程序(包名为com.droidyue.androidthreadschedule)为例。得到的进程id为22871
root@htc_m8tl:/ # ps | grep com.droidyue u0_a1434 22871 23723 970040 54304 ffffffff 400a045c S com.droidyue.androidthreadschedule
第三步,利用进程id查看其所在的cgroups
2|root@htc_m8tl:/ # cat /proc/22871/cgroup 3:cpu:/apps 2:memory:/ 1:cpuacct:/uid/11434
通过以上三步,我们就能把大象关冰箱里,我们就能得到进程所在的cgroups分组。
利用cgroups我们可以做什么
其实对于一般应用来说,能做的事情少之又少。对于有需要的应用可以使用Service.startForeground方法来获取更多的CPU资源,但并不建议盲目去这样做,还是要根据自身应用需要实现。
更深入的了解,请移步技术小黑屋。
相关文章推荐
- C#线程间不能调用剪切板的解决方法
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法
- C#中线程同步对象的方法分析
- ASP.NET线程相关配置
- 浅析linux环境下一个进程最多能有多少个线程
- 再谈JavaScript线程
- C#实现终止正在执行的线程
- Java线程编程中的主线程讲解
- 解析Java线程同步锁的选择方法