首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请详细描述进程(Process)和线程(Thread)有什么
[问答题]
请详细描述进程(Process)和线程(Thread)有什么区别。
添加笔记
求解答(0)
邀请回答
收藏(16)
分享
纠错
2个回答
添加回答
0
牛客820349319号
链接:
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)
0
牛客71456703号
不知道
发表于 2021-12-09 23:54:01
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
阅文集团
测试开发工程师
2021
来自:
2021届阅文测试开发...
上传者:
小小
难度:
2条回答
16收藏
1353浏览
热门推荐
相关试题
下列哪两个变量之间的相关程度高
数据分析师
途虎
2021
评论
(4)
来自
途虎养车2021秋招数据...
消消乐
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
PHP工程师
测试工程师
安全工程师
c#工程师
数据库工程师
大数据开发工程师
vivo
2020
嵌入式工程师
数据挖掘工程师
测试开发工程师
评论
(21)
五月份的商品销售额为60万元,该月...
数据分析师
途虎
2021
评论
(2)
来自
途虎养车2021秋招数据...
IPv4与IPv6的最大区别是什么...
阅文集团
测试开发工程师
2021
评论
(0)
来自
2021届阅文测试开发方...
字符串替换(测试开发)
阅文集团
测试开发工程师
2021
评论
(5)
来自
2021届阅文测试开发方...
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题