进程和线程

进程和线程

当一个应用组件启动并且该程序没有其他组件在运行时,Android系统会启动一个单线程的进程来运行这个程序。默认情况下,一个应用程序的所有组件都运行在同一个进程和线程中(通常叫做主线程Main Thread)。如果一个组件启动时,该应用程序已经有组件在运行了,那么这个组件将和已经运行的组件在同一个进程内部运行。当然,你也可以用独立的进程来运行不同的组件,也可以在任意进程中创建新的线程。

进程

 默认情况下,同一个应用程序的所有组件应该运行在同一个进程中,大部分的应用程序都不应该改变这种模式。除非你觉得你真的有必要自己控制你的组件应该属于哪个进程时,你可以在清单文件(manifest file)中来实现。

在清单文件中,每一个组件的入口都支持android:process属性来指定你的组件应该在哪个进程中运行。通过设置这个属性,你可以让同一个应用程序的一些组件在不同的进程中运行,而另外一些还是公用一个进程。当然,你也可以通过设置这个属性来实现让不同应用程序的组件运行在相同的进程中。

<application>元素也支持支持android:process属性,设置这个属性会作为其下所有组件的默认值。

当系统中的内存不够用,而又有其他进程需要为用户服务而请求内存时,android会关闭一个进程来释放内存。在这个进程中运行的应用程序组件也因此消亡了,当有新的任务需要执行时就会启动新的进程来运行这些组件。

系统根据进程相对于用户的重要性来决定杀死哪个进程。比如系统会优先杀死那些运行后台活动的进程,而不是那些运行可见活动的进程。因此,一个进程是否会被关闭,取决运行于其中的组件。下面讨论在选择要杀死的进程时遵循的规则。

进程的生命周期

Android系统试图保留一个进程越长越好,但是在需要释放内存给更重要的进程时,也会去清理就的进程。怎样去哪个进程该保留哪个进程该关闭呢?系统根据运行在进程中的组件以及这些组件的状态,给每一个进程定义了一个重要层级。重要层级最低的最先被关闭,次低级的随后,以此类推,以至有必要的时候回收系统资源。

共有五个重要层级,下面根据重要性从高到低列出了不同进程:

  1. 前台进程
  2. 可见进程
  3. 服务进程
  4. 后台进程
  5. 空进程

线程

 当一个应用程序被加载的时候,系统创建一个线程来执行这个应用程序,被称作“主线程”。

 

转载于:https://www.cnblogs.com/MichaelGuan/archive/2011/10/12/2209447.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux中的进程线程有以下几个区别: 1. 数据结构:在Linux中,线程是通过进程模拟出来的,没有真正意义上的线程数据结构。而在Windows中,操作系统为线程创建了thread_struct数据结构,因此有真正意义上的线程。 2. 执行流:在Linux中,每个线程实体对应着操作系统下的一条执行流,通过PCB(task_struct)来模拟。而用户态下创建的线程是通过线程库(pthread_struct)来进行管理。 3. 标识作用:在Linux中,轻量级进程ID(tid)对不同的线程起标识作用,操作系统在进行调度时使用tid。而进程ID(pid)对不同的进程起标识作用。在只有一个线程进程中,tid的值等于pid的值。 4. 线程私有部分:线程私有部分包括运行时栈、一组寄存器/硬件上下文/任务状态段等。 5. 多线程提高效率:多线程能够提高效率的原因是多核和单核环境下的不同。在多核环境下,多线程可以将庞大的任务分成若干份,并交给不同的线程进行处理,同时执行不同步骤的代码,从而提高效率。而在单核环境下,多线程并发执行,使用线程切换来提高整体代码的运行效率。 6. 进程线程的区别:进程是程序运行的实例,是系统分配资源的基本单位,拥有独立的地址空间;线程进程中的一条执行流,是CPU调度的基本单位,共享同一地址空间。创建和撤销进程的开销大于线程,不同进程间不会互相影响,而一个线程挂掉可以将整个进程挂掉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值