首页 > 试题广场 >

请详细描述进程(Process)和线程(Thread)有什么

[问答题]
请详细描述进程(Process)和线程(Thread)有什么区别。
链接:https://ac.nowcoder.com/questionTerminal/0cd5a9bfee894f1a846797f860de205a?trackId=404_page
来源:牛客网
Definition定义
-------------
Process
进程是应用程序的一次运行活动;从操作系统核心角度来说,进程是操作系统分配和调度系统内存资源、cpu时间片等资源的基本单位,为正在运行的应用程序提供运行环境。
Thread
线程是程序内部有并发性的顺序代码流。是cpu调度资源的最小单元。

Units单位大小
------------
Process
进程是操作系统分配和调度系统内存资源、cpu时间片 等资源的基本单位;一个进程至少包括一个线程。
进程是操作系统资源管理的实体。
Thread
线程是cpu调度资源的最小单元。
线程是进程的实体。

Resource系统资源分配上
-------------
Process
每个进程都有自己的内存地址空间。
Thread
线程没有自己独立的内存资源,它只有自己的执行堆栈和局部变量。但是在同属一个进程的多个线程中他们可以共享进程的内存资源。
Running执行过程中
-------------
执行过程中,进程有内存单元的初始入口点,在存活阶段里拥有独立的地址空间。
A process has the initial entrance of Memory Units and room of address.
进程是应用程序的一次运行活动,独立地执行;所以某一个进程崩溃以后,在保护模式下不会影响其他的进程,
健壮性好。
A process is activity of application.
父进程与子进程 的关系待研究深入中……
每个已创建的进程都可以创建进程,创建进程的进程称为父进程,被创建的新进程为子进程,这样便形成一个进程树。父进程与子进程可并行执行;父进程等待子进程终止执行。父进程终止后,所有的子进程也都必须要终止。
Thread
而线程不能独立地执行,它必须依附在一个运行中的应用程序上。
但是,同一个进程中的多个线程可以并发地执行,并发性高,系统在数据交换上花费的资源少,运行效率高。
主线程与其他线程 的关系待研究深入中……
每个进程里都会有一个主线程,由它创建其他线程。
======================================================
知识延伸:
进程(Process)和线程(Thread)
1.Process特点
(1)进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间;
(2)进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型;
(3)从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。
2.引入Thread目的:在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。
3.相同点:都是按特定顺序执行的指令序列/有自己的执行控制块-->拥有自己的寄存器、状态及调度策略等。
4.关系以及不同点
(1)进程存在于操作系统内,并对应于用户可看作为程序或应用程序的事物。另一方面,线程存在于进程内。因此,线程有时也称作“轻量进程”。一个进程至少包括一个线程,通常将该线程称为主线程,一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓的多线程。
(2)多个进程的存在使得计算机能够一次执行多个任务。而多个线程的存在使得进程能够分解工作以便并行执行。在多处理器计算机上,进程或线程可以在不同的处理器中运行。这使得真正的并行处理成为可能。
(3)并行处理处理并不总是能够成功。有时候必须要同步线程。一个线程可能必须等待另一个线程的结果,或者一个线程可能需要独占访问另一个线程正在使用的资源。同步问题是多线程应用程序中出现bug的一个常见原因。有时候线程可能最终等待的是永远不会变得可用的资源。这导致了一种称为“死锁”的状况。
(4)进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源大效率差,不适合并发。
5.实际应用:
(1)例如有一个Web服务器要进程的方式并发地处理来自不同用户的网页访问请求的话,可以创建父进程和多个子进程的方式来进行处理,但是创建一个进程要花费较大的系统开销和占用较多的资源。除外,这些不同的用户子进程在执行的时候涉及到进程上下文切换,上下文切换是一个复杂的过程。所以,为了减少进程切换和创建的开销,提高执行效率和节省资源,人们在操作系统中引入了"线程thread"的概念。
(2)对开发人员来说,线程之间的数据共享比进程之间的容易得多。在unix上,进程间数据共享是通过管道、SOCKET、共享内存、信号灯等通信机制实现的,在 windows 上也有一套类似的机制。而线程间数据共享只需要共享全局变量即可。多进程无疑比多线程程序更健壮一些,但是代价也是比较大的,特别在进程数或者线程数较多的情况下。
6.举例
例子1:进程就好比淮海战役,而线程就好比淮海战役中的某一次战斗。
(1)进程只是一个资源的集合体,拥有地址空间、寄存器、调度策略等,而线程是(利用这些资源)真正的执行单元;就好像淮海战役只是资源集合体,它拥有作战地点、兵营、作战策略等资源,而战斗才是这次战役真正的执行者。
(2)进程在执行过程中拥有独立的内存单元,多个线程共享内存(只能共享所在进程中的内存);就好像淮海战役拥有自己独立的武器和士兵(平津战役是不可以使用这些资源的),而淮海战役的每次战斗却可以共享这些武器和士兵。补充①:对于某一火炮or特种兵(暂用cache表示)的使用,物不能复制人不能分身,a战斗(a线程)在使用这一cache时,b战斗(b线程)就要排队等候a战斗执行完毕才可以使用这个cache,如果a战斗打的昏天黑地,b战斗就等不到这一cache,后面的战斗也无法进行,这样就形成了"死锁"。补充②:进程之间可以共享内存,但它却拥有自己的栈空间和独立的执行序列,即线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)。铁打的兵营流动的兵,兵营是不可以共享的。
(3)每个独立线程都包含程序运行的入口、顺序执行序列和程序的出口,正因为如此多线程才可以在应用程序中使多个部分并发执行。但这并不意味着线程能够独立应用,线程必须依靠进程的调度控制才可以使用;就好像淮海战役的每次战斗都可形成一个独立的单元,都拥有进攻、防御、行军都动作,也正因为如此,多个战斗可以并发执行。但一次战役必须统一调度控制才会取得胜利,否则就会被敌人击破,从而是整个战役(整个进程)崩溃。
(4)从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU 时间片等资源的基本单位,是为正在运行的程序提供的运行环境;就好像淮海战役,从我们角度看,淮海战役就是一个战斗执行过程,从将军角度看,淮海战役代表为每个战区分配多少兵力,多长时间必须攻下山头,是在为整个战役提供一个执行环境。
例子2:线程指的是你的CPU运行时能开的几个通道,就像公路上有几条车道,原来的CPU能开一个线程,也就是只能同时做一个事情,走一辆车子;现在的CPU就先进多了,INTEL的双线程技术,就是能开两条路来走车子,所以比单车道要先进!而进程是针对你的系统来说的,进程就是在运行的程序,就好像一条公路,这条公路可以有一个通道(单线程的进程)、也可以有多个通道(多线程的进程)。
例子3:在Windows 3.x下,进程是最小运行单位,你每启动一个程序,就启动了一个进程;在Windows 3.x以后,线程是最小单位,每个进程可以启动多个线程(它们彼此共享所在进程中的虚拟空间,所以会出现多个线程操作一片内存的情况),比如每下载一个文件可以单独开一个线程。
7.进程与程序的区别
程序是一组指令的集合,它是存储在计算机系统的硬盘中的静态文件,没有执行的含义。而进程是一个动态的实体,有自己的生命周期。一般说来,一个进程肯定与一个程序相对应,并且只有一个,但是一个程序可以有多个进程,或者一个进程都没有。简单地说,进程是程序的一部分,程序运行的时候会产生进程。
8.总结:线程是进程的一部分,进程是程序的一部分。
源自:http://blog.csdn.net/forwayfarer/article/details/2918924

————————————————
版权声明:本文为CSDN博主「华子任」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/honglin_ren/article/details/35839979
发表于 2021-12-10 09:47:37 回复(0)
不知道
发表于 2021-12-09 23:54:01 回复(0)