进程 线程 程序

9 篇文章 0 订阅

进程 
 对应用程序来说,进程就像一个大容器。在应用程序被运行后,就相当于将应用程序装进容器里了,你可以往容器里加其他东西(如:应用程序在运行时所需的变量数据、需要引用的DLL文件等),当应用程序被运行两次时,容器里的东西并不会被倒掉,系统会找一个新的进程容器来容纳它。 

  进程是由进程控制块、程序段、数据段三部分组成。一个进程可以包含若干线程(Thread),线程可以帮助应用程序同时做几件事(比如一个线程向磁盘写入文件,另一个则接收用户的按键操作并及时做出反应,互相不干扰),在程序被运行后中,系统首先要做的就是为该程序进程建立一个默认线程,然后程序可以根据需要自行添加或删除相关的线程。 
是可并发执行的程序。在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位,也是称活动、路径或任务,它有两方面性质:活动性、并发性。进程可以划分为运行、阻塞、就绪三种状态,并随一定条件而相互转化:就绪--运行,运行--阻塞,阻塞--就绪。 

  进程为应用程序的运行实例,是应用程序的一次动态执行。看似高深,我们可以简单地理解为:它是操作系统当前运行的执行程序。在系统当前运行的执行程序里包括:系统管理计算机个体和完成各种操作所必需的程序;用户开启、执行的额外程序,当然也包括用户不知道,而自动运行的非法程序(它们就有可能是病毒程序)。 
  危害较大的可执行病毒同样以“进程”形式出现在系统内部(一些病毒可能并不被进程列表显示,如“宏病毒”),那么及时查看并准确杀掉非法进程对于手工杀毒有起着关键性的作用。 

进程是程序在计算机上的一次执行活动。当你运行一个程序,你就启动了一个进程。显然,程序是 

死的(静态的),进程是活的(动态的)。进程可以分为系统进程和用户进程。凡是用于完成操作系统的各种 

功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身;用户进程就是所有由你启动的进程。进程是操作系统进行资源分配的单位。 

在Windows下,进程又被细化为线程,也就是一个进程下有多个能独立运行的更小的单位。 
1.进程的引入: 
多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程(Process)”概念。 
2.进程的概念: 
进程的概念是60年代初首先由麻省理工学院的MULTICS系统和IBM公司的CTSS/360系统引入的。 
进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。 
进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。 
操作系统引入进程的概念的原因: 
从理论角度看,是对正在运行的程序过程的抽象; 
从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。 
3.进程的特征 
动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。 
并发性:任何进程都可以同其他进程一起并发执行 
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位; 
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进 
结构特征:进程由程序、数据和进程控制块三部分组成。 
4.进程与程序的关系 
程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。 
程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。 
进程更能真实地描述并发,而程序不能;进程是由程序和数据两部分组成的。 
进程具有创建其他进程的功能,而程序没有。 
同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程。 
在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单元都是进程。 



线程
是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。 
线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程. 
线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU
线程的周期 
新建 就绪 运行 阻塞 死亡 
线程调度与优先级 
有线程进入了就绪状态,需要有线程调度程序来决定何时执行,根据优先级来调度. 
线程组 
每个线程都是一个线程组的一个成员,线程组把多个线程集成一个对象,通过线程组可以同时对其中的多个线程进行操作.在生成线程时必须将线程放在指定的线程组,也可以放在缺省的线程组中,缺省的就是生成该线程的线程所在的线程组.一旦一个线程加入了某个线程组,不能被移出这个组. 
守护线程 
是特殊的线程,一般用于在后台为其他线程提供服务. 
isDaemon():判断一个线程是否为守护线程. 
set Daemon():设置一个线程为守护线程. 
Thread类和Runnable接口 
Thread类 
类Thread在包java.lang中定义,它的构造方法如下: 
public Thread(); 
public Thread(Rannable target); 
public Thread(Rannable target,String name); 
public Thread(String name); 
public Thread(ThreadGroup group,Rannable target); 
public Thread(ThreadGroup group, String name); 
主要方法 
isActive() 判断是否处于执行状态 
Suspend() 暂停执行 
reSume 恢复执行 
start() 开始执行 
Stop() 停止执行 
sleep() 睡眠 
run() 程序体 
yield() 向其他线程退让运行权 
线程优先级 
Public statuc final int MAX_PRIORITY最高优先级,10 
Public statuc final int MIN_PRIORITY最低优先级,1 
Public statuc final int NORM_PRIORITY普通优先级,5 
Runnable接口 
Runnable接口中只定义了一个方法run()作为线程体, 
void run() 

程序 :
chénɡ xù 
①事情进行的先后次序:工作程序|按程序进行。②指示计算机按解决问题的步骤,实现预期目的而进行操作的一系列语句和指令。一般分为系统程序和应用程序两大类。 
程序就是为使电子计算机执行一个或多个操作,或执行某一任务,按序设计的计算机指令的集合。

程序,是现在最吃香的提法。 

任何单位任何事情,首先强调的就是程序,因为管理界有句名言:细节决定成败。程序就是整治细节最好的工具。于是,现在我们的所有工作,无时无处不在强调程序。 

因为有了规范的办事程序,现在我们这些平民百姓到
政府机关办事比原来容易了许多,最起码知道办什么事该找哪个部门,知道办这个事应该用多长时间了。政府公开办事程序,也拉近了和人民群众的关系。好,这是好得很的事。 

好像是为了印证事物都是一分为二的道理一样,在赞颂程序的同时,我们也看到了程序冷酷的另一面。南宁见义勇为的英雄鲍光蛇在医院冷酷的程序中流尽了最后一滴血,公路收费站的值班人员因救护车交不出十元钱的过路费而坚决不放行救护车,终于使急需救助的患者丧命,……等等的例子,都为我们强调或者说奉为神圣规则的程序优先勾画出了它的原形。 

程序,是管理方式的一种,是能够发挥出协调高效作用的工具,在我们的社会主义建设事业或者说现代化建设中,应该充分重视它的作用,应该不断地将我们的工作从无序整改到有序。 

可是,当我们只关注形式而不关注实质的时候,有些事情就发展到了它的反面。程序不是医治百病的灵丹妙药,在它走向反面的时候,它是使那些官僚主义者和视劳苦大众利益如不见的人们推脱掉自己应当承担的责任的最好的挡箭牌。因为越是严密完善的程序,按部就班执行起来越是要付出时间的代价,当时间被浪费了时候,因此引发的其他损失是不应该由模范执行了程序的人来负责的。 

南宁的这个医院,应该说管理是非常规范化的了。在见义勇为的伤者鲍光蛇被抬进来以后,他们认真地履行了各种应当进行的检查程序,每个人都是负责的。当然,英雄的血流的快了点,让他们的检查程序没有进行完毕。这不是医院的责任!每个大夫都会这样推脱的。事实上,他们也就是这样做了。因为我们从报道中看到,大夫说,医院里面这样的事情多了,急惊风遇上慢郎中,这是历史留下来的遗产。总不能因为鲍光蛇就改变了我们的老传统吧,再说我们现在的管理可比以前规范得多了。 

再把话说得远一点。 

这些年来,我们的管理工作在完善程序的路上走得是比较远了些。现在看我们的各行各业,哪一家的工作程序不是越来越完善,越来越规范,越来越让人摸不着头脑。就拿法律来说吧,这可是最规范的程序了。当初,我们没有刑法,没有民法,也没有刑诉法民诉法和行政诉讼法,据说这是老一辈无产阶级革命家轻视法律、没有法律意识的结果。但是社会的刑事发案率在百万分之五左右。全国的刑事案件总数,直到八十年代中期,一直徘徊在20万件上下。现在,我们有了
刑法,有了民法,有了专门的公司法票据法合同法,法典和法学论著汗牛充栋,许多学者著作等身,办案的程序比以前严密的太多了,那就根本不是一个档次了。程序严密了,效果如何呢?倒是公开报道的数据能说明问题,现在全国刑事案件的发案数已经跃上了百万件大关,民事案件更是一个天上一个地下的差距,每年都数千万件了。与此相应,警察的数量、法官的数量、律师的数量,也都比改革开放前翻了几番。毕竟吗,老鼠多了,抓老鼠的猫一定也要多起来才行,不然,老鼠多猫少,生态就不平衡了,不是治不了老鼠,就是累死猫。反正这两样都不是和谐社会所需要的。程序被异化的另一个例子是民工工资。据说全国的民工工资被拖欠了千亿元,据说,按程序追讨,民工还要再付三千到五千亿元的费用。得到的没有付出的多,那这些民工还能按程序追讨自己的工资吗? 

说了这么多,我自己都糊涂了,这程序是好东西呢还是坏东西呢?还是两个方面都有那么一点? 

想了好长时间,忽然觉得明白了一点,说这程序是好还是不好,不在这程序本身,关键是看你是用程序的还是制定程序的!

为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合
计算机中的程序在港澳台地区称为程式
是人们求解问题的逻辑思维活动的代码化描述
程序的最重要的目的是:
便于阅读、交流

位于“开始”菜单中的一个文件夹,在中文XP操作系统里的目录是C:\Documents and Settings\XX(你的用户名)\「开始」菜单\程序,安装的软件在里面都有快捷方式。 
程序:用汇编语言、高级语言等开发编制出来的可以运行的文件。

应用程序,在计算机中称可执行文件(后缀名一般为.exe)。我们玩的游戏一般都是应用程序(但现在后缀名为.swf的Flash影片类的游戏也比较流行)


进程和程序区别和联系表现在以下方面: 
1)程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是 
一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。 
进程是一个动态的实体,它有自己的生命周期。它因创建而产生,因 
调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被 
撤消。反映了一个程序在一定的数据集上运行的全部动态过程。 
2)进程和程序并不是一一对应的,一个程序执行在不同的数据集上就成 
为不同的进程,可以用进程控制块来唯一地标识每个进程。而这一点 
正是程序无法做到的,由于程序没有和数据产生直接的联系,既使是 
执行不同的数据的程序,他们的指令的集合依然是一样的,所以无法 
唯一地标识出这些运行于不同数据集上的程序。一般来说,一个进程 
肯定有一个与之对应的程序,而且只有一个。而一个程序有可能没有 
与之对应的进程(因为它没有执行),也有可能有多个进程与之对应(运 
行在几个不同的数据集上)。 
3)进程还具有并发性和交往性,这也与程序的封闭性不同。 
---------------------------------------------------------------------------------------------- 

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 

简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 
线程的划分尺度小于进程,使得多线程程序的并发性高。 
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 
线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. 

---------------------------------------------------------------------------------------------- 

进程和线程的区别 

说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 



说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 

简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 

线程的划分尺度小于进程,使得多线程程序的并发性高。 

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 



说法三:多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢? 

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 

线程的划分尺度小于进程,使得多线程程序的并发性搞。 

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 

进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。 

C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时,处在可执行状态中的应用程序称为进程。从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。多任务环境下应用程序进程的主要特点包括: 

●进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间; 

●进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型; 

●从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。 

在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。 

说法四:应用程序在执行过程中存在一个内存空间的初始入口点地址、一个程序执行过程中的代码执行序列以及用于标识进程结束的内存出口点地址,在进程执行过程中的每一时间点均有唯一的处理器指令与内存单元地址相对应。 

Java语言中定义的线程(Thread)同样包括一个内存入口点地址、一个出口点地址以及能够顺序执行的代码序列。但是进程与线程的重要区别在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,因此可以定义线程是程序内部的具有并发性的顺序代码流。 

Unix操作系统和Microsoft Windows操作系统支持多用户、多进程的并发执行,而Java语言支持应用程序进程内部的多个执行线程的并发执行。多线程的意义在于一个应用程序的多个逻辑单元可以并发地执行。但是多线程并不意味着多个用户进程在执行,操作系统也不把每个线程作为独立的进程来分配独立的系统资源。进程可以创建其子进程,子进程与父进程拥有不同的可执行代码和数据内存空间。而在用于代表应用程序的进程中多个线程共享数据内存空间,但保持每个线程拥有独立的执行堆栈和程序执行上下文(Context)。 

基于上述区别,线程也可以称为轻型进程 (Light Weight Process,LWP)。不同线程间允许任务协作和数据交换,使得在计算机系统资源消耗等方面非常廉价。 

线程需要操作系统的支持,不是所有类型的计算机都支持多线程应用程序。Java程序设计语言将线程支持与语言运行环境结合在一起,提供了多任务并发执行的能力。这就好比一个人在处理家务的过程中,将衣服放到洗衣机中自动洗涤后将大米放在电饭锅里,然后开始做菜。等菜做好了,饭熟了同时衣服也洗好了。 

需要注意的是:在应用程序中使用多线程不会增加 CPU 的数据处理能力。只有在多CPU 的计算机或者在网络计算体系结构下,将Java程序划分为多个并发执行线程后,同时启动多个线程运行,使不同的线程运行在基于不同处理器的Java虚拟机中,才能提高应用程序的执行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值