Android nice在进程与线程调度中的作用

来源:互联网 发布:灰鸽子软件下载 编辑:程序博客网 时间:2024/05/22 07:42

基本概念:

进程:计算机进行资源分配和高度的基本单位,是程序运行的实体,也是线程的容器。

线程:是进程中实际执行的单元,是程序执行的最小单元,属于一个进程。

一个进程可以拥有多个线程。

nice在进程调试中作用

在Android中,可以使用nice值来设定一个进程的优先级,系统的调度器可以根据nice值来合理的调度进程,主要特点如下:

在Android中,nice的取值范围为-20~19在Android中,nice值的默认大小为0在Android中,nice值越大,进程的优先级越低,获得的CPU调用机会就越少;nice值越高,进程的优先级越高,获得的CPU调用机会越多在Android中,父进程fork出来的子进程nice值与父进程相同,你进程renice后,子进程的nice值不会改变

如何更改进程的nice值

Android中可用如下命令更改进程的nice值,

usage: nice [-n PRIORITY] command [args...]Run a command line at an increased or decreased scheduling priority.Higher numbers make a program yield more CPU time, from -20 (highestpriority) to 19 (lowest).  By default processes inherit their parent'sniceness (usually 0).  By default this command adds 10 to the parent'spriority.  Only root can set a negative niceness level.USAGE: renice [[-r] [-t TYPE] priority pids ...] [-g pid]

其中nice命令用于设置一个新创建的进程的优先级,而renice命令用于更改已经创建的进程的优先级,且这两个命令都需要在root权限下运行。

线程调度

在Android开发中,我们用的最多的是对于线程优先级的控制,但在Android中,出现了两种版本的线程优先级控制:JAVA版本和Android版本,两种版本的优先级的主要差别如下:

JAVA版本中的优先级使用java.lang.Thread中的setPriority(int priority)和getPriority()设置和获得线程的优先级,其只包括三种类型的线程优先级,属于粗粒度控制,如下:   public static final intMAX_PRIORITY = 10   public static final intMIN_PRIORITY = 5   public static final intMIN_PRIORITY = 1

  而Android版本中的线程优先级使用android.os.Process类中的setThreadPriority(int priority)和getPriority()设置和  获得线程的优先级,其包括10中线程优先级,相对于JAVA的属于细粒度控制策略,如下:

  因此,在设置和获取线程优先级时,建议使用Android版本的API。

Android API的线程优先级和JAVA原生API的优先级是相对独立的,比如使用 android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND) 后,使用Java原生API,Thread.getPriority()得到的值不会改变。

由于上术第二点的差别,导致在分析ANR log时需要格外注意,在下面的ANR日志信息中,prio=5中proi的值对应的JAVA原生API的线程优先级。而nice=-6中的nice表示的Android API版本的线程优先级。

“main” prio=5 tid=1 NATIVE
| group=”main” sCount=1 dsCount=0 obj=0x41690f18 self=0x4167e650
| sysTid=1765 nice=-6 sched=0/0 cgrp=apps handle=1074196888
| state=S schedstat=( 0 0 0 ) utm=5764 stm=3654 core=2
#00 pc 00022624 /system/lib/libc.so (__futex_syscall3+8)
#01 pc 0000f054 /system/lib/libc.so (__pthread_cond_timedwait_relative+48)
#02 pc 0000f0b4 /system/lib/libc.so (__pthread_cond_timedwait+64)

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2岁宝宝有口臭是怎么办 两岁宝宝有口气怎么办 2岁宝宝口气重是什么原因怎么办 两岁宝宝口气重怎么办 两岁宝宝有口臭怎么办 两岁身高不达标怎么办 两岁宝宝82厘米怎么办 2岁幼儿说话结巴怎么办 2岁的宝宝结巴怎么办 2岁半宝宝口吃怎么办 2周岁宝宝不说话怎么办 三周岁宝宝不说话怎么办 2周岁宝宝突然说话结巴怎么办 两周岁宝宝突然说话结巴怎么办 三周岁宝宝说话突然结巴怎么办 小孩g和d不分怎么办 两岁宝宝皮肤黑怎么办 2岁宝宝肤色偏黄怎么办 2岁宝宝迷上手机怎么办 2岁宝宝说话口吃怎么办 两岁宝宝突然口吃怎么办 两岁半的宝宝还不会说话怎么办 2岁宝宝自闭症怎么办呀 新生儿又吐又拉怎么办 一岁多宝宝受凉呕吐拉稀怎么办 7个月的宝宝腹泻怎么办 两岁宝宝拉稀水怎么办 2岁宝宝发烧呕吐怎么办 1岁宝宝着凉呕吐怎么办 2岁着凉了呕吐怎么办 2岁宝宝着凉呕吐怎么办 两岁宝宝偏矮怎么办 2岁宝贝吐没精神怎么办 11个月的宝宝吐怎么办 二岁的宝宝吐了怎么办 十个月小孩吐了怎么办 10个月宝宝呕吐怎么办 小孩又拉又吐的怎么办 小孩子不吃饭呕吐拉肚子怎么办 小孩发烧后又吐怎么办 11个月宝宝吐了怎么办