程序和进程和线程的区别是什么?

程序和进程和线程的区别是什么?

进程是操作系统资源分配的基本单位,线程是任务调度执行基本单位(CPU的基本调度单位),程序是静态的指令集合,而进程是运行中的指令集合。 进程:程序的一次执行,

答法1:
进程间切换代价大,线程间切换代价小

进程拥有资源多,线程拥有资源少

多个线程共享进程的资源

进程是分配资源的基本单位,而线程是独立运行和调度的基本单位。

任意时刻,一个CPU只能运行一个进程,进程获得资源后进行分配,由不同的线程来执行和协作。

进程的内存空间一般是独立的,而线程的内存空间一般是共享的,线程间的同步是为了防止竞争(因同时修改导致数据的不一致),所以要使用互斥锁,防止多个线程同时读写某一块内存区域。 还有的内存区域只允许固定个数的线程进入,就要使用信号量,防止线程之间产生冲突。

互斥锁止允许一个线程进入临界区,而信号量允许多个线程同时进入临界区。

答法2:
a地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。

b.通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中
Socket和Streams支持不同主机上的两个进程IPC。

c.调度和切换:线程上下文切换比进程上下文切换要快得多。

d.在多线程OS中,进程不是一个可执行的实体。

程序:

程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的有序集合。

程序(这里和前边指的是包含了线程,进程,程序的抽象概念)有顺序执行(顺序性,只有前一操作结束后才能执行后续操作;封闭性,程序一旦运行,其执行结果不受外界因素的影响;可再现性,输入条件相同,其结果一定相同),并发执行(间断性,失去封闭性,不可再现性,总体来说就是虽然提高了效率,但程序输出的结果变得不可预料,结果不光和输入有关还和cpu有关),并行执行(相互独立,异步)三种方式。

应用程序(这里指的是进程,例如迅雷,QQ,浏览器等)之间一般是并发执行的,一个线程(比如java程序,一个主方法就是一个线程)内是顺序执行的,多个线程(比如java程序,通过主方法创建其余thread对象,从而让jvm创建多个线程,这里要知道jvm本身就是一个程序,一个进程)之间可以顺序也可以并发执行。

进程:

进程是程序的一次执行过程。

进程具有五个基本特征:动态性(一是体现在 进程是程序这个静态实体的执行过程;二是体现在进程由创建而产生,由调度而执行,由得不到资源而暂停执行,由撤销而消亡,这是一个生命周期), 并发性(多个进程存在于内存中,可以在一段时间内同时运行),独立性,异步性,结构性(进程由程序段,数据段,进程控制块PCB三部分组成,这三部分统称为“上下文”) 进程三种基本状态:就绪状态(除了处理器,也就是cpu外已分配到所有必要资源,只要获得cpu就能执行,系统里有就绪队列),等待状态(因发生某些事件而无法执行时,释放cpu,进入等待队列,等事件结束后进入就绪队列),执行状态(已获得cpu,程序正在执行)

进程和程序的区别:

(1)程序是永存的,是静态的,本身只是一组有序指令的集合,保存在硬盘上,除非手动删除掉,否则永远存在;进程是暂时的,是动态的,进程是程序在数据集上的一次执行,有创建有撤销,具备生命周期,存在是暂时的;

(2)进程(运行中的程序)能并发执行,而程序(静态实体)不能并发执行(程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种运行中的程序称之为进程)。
(3)进程和程序不是一一对应的:
一个程序可对应多个进程(即多个进程可执行同一程序,一个程序运行在不同数据集上就构成了不同进程,比如***QQ);一个进程可以执行一个或几个程序(最典型的例子就是几乎所有程序都需要显卡驱动进程支持)

线程:线程是进程的一个实体。

线程也具有动态性(也具备生命周期),并发性,拥有自己的线程控制块TCB,一个线程可创建另一个线程(例如java主方法创建多个thread线程对象),在同一进程内各线程共享同一地址空间(即所属进程的内存空间),一个进程的线程在另一进程内不可见。 相对进程而言,线程是一个更加接近于执行体的概念,进程在执行过程中拥有独立的内存单元,而线程自己基本上不拥有系统资源,也没有自己的地址空间,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和线程栈)。

线程和进程的区别:

答法3:
1.从底层来说,进程=cpu加载上下文+cpu执行+cpu保存上下文,线程=(在共享进程的上下文的基础下,将程序的实现分为多个程序段来执行,每个程序段就被称为线程),也就是说线程和进程都是cpu工作时间段的描述,只不过线程的cpu工作时间段小,进程的cpu工作时间段大。

2.在同一进程中的不同线程共享相同的地址空间,而不同的进程则在内存中有独立的地址空间。因此线程可以读写同样的数据结构和变量,便于线程之间的通信。相反,进程间通信(IPC)很困难且消耗更多资源。

3.一个线程死掉就等于整个进程死掉,而一个进程死掉,由于保护机制,其他进程不受影响,所以多进程的程序要比多线程的程序健壮(稳定)。
4.一个进程可包含多个线程,线程属于进程。
5.线程是调度(获得的cpu的所有权)的基本单位,进程是资源分配的基本单位。

你可能感兴趣的:(Java)