当前位置:主页>科 研>学术交流>

剖析Android中进程与线程调度之nice

在计算机操作系统中,进程是进行资源分配和调度的基本单位,同时每个进程之内也可以存在多个线程。那么在Android系统(Linux Kernel)中,进程是如何去抢占资源,线程又是如何根据优先级切换呢,本文将尝试剖析这个问题,研究nice在Linux以及Android系统中的 应用。



 

  一些概念

进程 是计算机系统中,程序运行的实体,也是线程的容器。

线程 是进程中实际执行单位,一个线程是程序执行流的最小单元。在一个进程中可以有多个线程存在。

  nice与进程调度

Linux中,使用nice value(以下成为nice值)来设定一个进程的优先级,系统任务调度器根据nice值合理安排调度。

nice的取值范围为-20到19。

通常情况下,nice的默认值为0。视具体操作系统而定。

nice的值越大,进程的优先级就越低,获得CPU调用的机会越少,nice值越小,进程的优先级则越高,获得CPU调用的机会越多。

一个nice值为-20的进程优先级最高,nice值为19的进程优先级最低。

父进程fork出来的子进程nice值与父进程相同。父进程renice,子进程nice值不会随之改变。

  词源考究

nice这个命令的来源几乎没有资料提到,于是便尝试自己来推断一下。在诸如词霸,沪江等词典给出的意思均为好的;美好的;可爱的;好心的,友好 的。而有道词典则稍微给出了一个其他词典没有的和蔼的。个人认为有道给出的这个比较合理。要想做到和蔼,就需要做到谦让,因此或多或少牺牲自己一点,成全 他人。所以nice值越高,越和蔼,但是自己的优先级也会越低。

renice

对于一个新的进程我们可以按照下面的代码为一个进程设定nice值。

nice -n 10 adb logcat

对于已经创建的进程,我们可以使用renice来修改nice值

sudo renice -n 0 -p 24161

该命令需要使用root权限,-p对应的值为进程id。

注意renice命令在Linux发行版中-n 的值应该为进程的目标优先级。而Mac下-n,则是代表对当前权限的增加值。 比如在Mac下,讲一个进程的nice值由19改成10,可以这样操作sudo renice -n -9 -p 24161,这一点需要注意,避免掉进坑里。

  Android中的nice

由于Android基于Linux Kernel,在Android中也存在nice值。但是一般情况下我们无法控制,原因如下:

Android系统并不像其他Linux发行版那样便捷地使用nice命令操作。

renice需要root权限,一般应用无法实现。

  线程调度

虽然对于进程的优先级,我们无法控制,但是我们可以控制进程中的线程的优先级。在Android中有两种线程的优先级,一种为Android API版本,另一种是 Java 原生版本。

(责任编辑:安博涛)

分享到:

更多
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
  • 微笑/wx
  • 撇嘴/pz
  • 抓狂/zk
  • 流汗/lh
  • 大兵/db
  • 奋斗/fd
  • 疑问/yw
  • 晕/y
  • 偷笑/wx
  • 可爱/ka
  • 傲慢/am
  • 惊恐/jk
用户名: 验证码:点击我更换图片
资料下载专区
图文资讯

企业如何抵御弱云密码

企业如何抵御弱云密码

弱密码对于依靠云服务的企业来说是一种常见的威胁。专家Dejan Lukan总结了一些关于密...[详细]

确保欧洲数据中心免受网络安全攻击

确保欧洲数据中心免受网络安全攻击

鉴于现如今数据中心的相关设备正日渐成为网络黑客的攻击目标,欧洲的数据中心运营商们...[详细]

国内数据分析“七宗罪”

国内数据分析“七宗罪”

每一个做过调研的人,都会惊讶于中美两国在大数据分析理念和客户心态上的巨大差别。 ...[详细]

使用软件定义技术的理由

使用软件定义技术的理由

不论对于数据中心的哪个部分,软件定义的概念都在不断发展。到现在为止,大多数管理员...[详细]

建立变更管理系统 消除数据中心混乱

建立变更管理系统 消除数据中心混乱

IT企业正陷入数据中心配置变更管理的困境,通常他们的变更管理工具已经过时。 业务流...[详细]

返回首页 返回顶部