什么是系统进程,线程

什么是系统 进程
进程是指在系统中正在运行的一个应用程序; 线程是系统分配处理器时间资源的基本单元,或者说 进程之内独立执行的一个单元。对于操作系统而言,其调度单元是 线程。一个 进程至少包括一个 线程,通常将该 线程称为主 线程。一个 进程从主 线程的执行开始进而创建一个或多个附加 线程,就是所谓基于多 线程的多任务。
进程线程的区别到底是什么? 进程是执行程序的实例。例如,当你运行记事本程序(Nodepad)时,你就创建了一个用来容纳组成 Notepad.exe的代码及其所需调用动态链接库的 进程。每个 进程均运行在其专用且受保护的地址空间内。因此,如果你同时运行记事本的两个拷贝,该程序正在使用的数据在各自实例中是彼此独立的。在记事本的一个拷贝中将无法看到该程序的第二个实例打开的数据。
以沙箱为例进行阐述。一个 进程就好比一个沙箱。 线程就如同沙箱中的孩子们。孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其它沙箱中的其他孩子。因此,每个 进程就象一个被保护起来的沙箱。未经许可,无人可以进出。
实际上 线程运行而 进程不运行。两个 进程彼此获得专用数据或内存的唯一途径就是通过协议来共享内存块。这是一种协作策略。下面让我们分析一下任务管理器里的 进程选项卡。
这里的 进程是指一系列 进程,这些 进程是由它们所运行的可执行程序实例来识别的,这就是 进程选项卡中的第一列给出了映射名称的原因。请注意,这里并没有 进程名称列。 进程并不拥有独立于其所归属实例的映射名称。换言之,如果你运行5个记事本拷贝,你将会看到5个称为Notepad.exe的 进程。它们是如何彼此区别的呢?其中一种方式是通过它们的 进程ID,因为每个 进程都拥有其独一无二的编码。该 进程ID由Windows NT或Windows 2000生成,并可以循环使用。因此, 进程ID将不会越编越大,它们能够得到循环利用。第三列是被 进程中的 线程所占用的CPU时间百分比。它不是CPU的编号,而是被 进程占用的CPU时间百分比。此时我的系统基本上是空闲的。尽管系统看上去每一秒左右都只使用一小部分CPU时间,但该系统空闲 进程仍旧耗用了大约99%的CPU时间。
第四列,CPU时间,是CPU被 进程中的 线程累计占用的小时、分钟及秒数。请注意,我对 进程中的 线程使用占用一词。这并不一定意味着那就是 进程已耗用的CPU时间总和,因为,如我们一会儿将看到的,NT计时的方式是,当特定的时钟间隔激发时,无论谁恰巧处于当前的 线程中,它都将计算到CPU周期之内。通常情况下,在大多数NT系统中,时钟以10毫秒的间隔运行。每10毫秒NT的心脏就跳动一下。有一些驱动程序代码片段运行并显示谁是当前的 线程。让我们将CPU时间的最后10毫秒记在它的帐上。因此,如果一个 线程开始运行,并在持续运行8毫秒后完成,接着,第二个 线程开始运行并持续了2毫秒,这时,时钟激发,请猜一猜这整整10毫秒的时钟周期到底记在了哪个 线程的帐上?答案是第二个 线程。因此,NT中存在一些固有的不准确性,而NT恰是以这种方式进行计时,实际情况也如是,大多数32位操作系统中都存在一个基于间隔的计时机制。请记住这一点,因为,有时当你观察 线程所耗用的CPU总和时,会出现尽管该 线程或许看上去已运行过数十万次,但其CPU时间占用量却可能是零或非常短暂的现象,那么,上述解释便是原因所在。上述也就是我们在任务管理器的 进程选项卡中所能看到的基本信息列。








什么是 线程?

究竟 什么是 线程呢?正如在图A中所示,一个 线程是给定的指令的序列 (你所编写的代码),一个栈(在给定的方法中定义的变量),以及一些共享数据(类一级的变量)。 线程也可以从全局类中访问静态数据。


栈以及可能的一些共享数据



每个 线程有其自己的堆栈和程序计数器(PC)。你可以把程序计数器(PC)设想为用于跟踪 线程正在执行的指令,而堆栈用于跟踪 线程的上下文,上下文是当 线程执行到某处时,当前的局部变量的值。虽然你可以编写出在 线程之间传送数据的子程序,在正常情况下,一个 线程不能访问另外一个 线程的栈变量。

一个 线程必须处于如下四种可能的状态之一,这四种状态为:

初始态:一个 线程调用了new方法之后,并在调用start方法之前的所处状态。在初始态中,可以调用start和stop方法。
Runnable:一旦 线程调用了start 方法, 线程就转到Runnable 状态,注意,如果 线程处于Runnable状态,它也有可能不在运行,这是因为还有优先级和调度问题。 阻塞/ NonRunnable: 线程处于阻塞/NonRunnable状态,这是由两种可能性造成的:要么是因挂起而暂停的,要么是由于某些原因而阻塞的,例如包括等待IO请求的完成。 退出: 线程转到退出状态,这有两种可能性,要么是run方法执行结束,要么是调用了stop方法。
最后一个概念就是 线程的优先级, 线程可以设定优先级,高优先级的 线程可以安排在低优先级 线程之前完成。一个应用程序可以通过使用 线程中的方法setPriority(int),来设置 线程的优先级大小。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值