面试突击:进程和线程有什么区别?
作者:磊哥
来源 | Java面试真题解析(ID:aimianshi666)
转载请联系授权(微信ID:GG_Stone)
从用户的角度来看,进程是正在运行的程序实例,而线程是进程中真正执行任务的基本单位。也就是说一个运行的程序至少包含一个进程,一个进程至少包含一个线程,线程不能独立于进程而存在。
进程
进程(Process)是操作系统分配资源的基本单位,一个进程拥有的资源有自己的堆、栈、虚存空间(页表)、文件描述符等信息。从编程的角度来理解进程,可以把它看作是一个类或一个 PCB(Process Control Block)进程控制块的结构体,这个结构体中大致包含以下几个内容:
1.进程编号 PID:进程的身份标识。
2.进程的状态:
- 新建状态
- 就绪状态
- 运行状态
- 阻塞状态
- 销毁状态
3.执行优先级
4.上下文:保存本次执行状态,以便下次继续执行,这个过程就是一个上下文。
5.内存地址
线程
线程(Thread)是操作系统能够进行运算调度的基本单位。它包含在进程中,是进程中的实际运行单位。在 Unix System V 及 SunOS 中线程也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
PS:用户线程可以理解为应用程序自己的线程,由程序员创建并控制的线程;而内核线程是内核支持并使用的线程。
线程优势
线程是轻量级的进程,一个进程中包含了多个线程,因此多个线程间可以共享进程资源,线程和进程的关系如下图所示:
其中,堆和方法区是可以共享的区域,而程序计数器和栈是每个线程私有的。
- 程序计数器是一块内存区域,用来记录线程当前要执行的指令地址。
- 栈是用来记录每个线程自己的局部变量的。
- 堆中存放的是当前程序创建的所有对象。
- 方法区存放的是常量和静态变量等信息。
进程和线程的区别
进程和线程的区别主要体现在以下几点。
区别1:从属关系不同从属关系不同:
进程是正在运行程序的实例,进程中包含了线程,而线程中不能包含进程。
区别2:描述侧重点不同描述侧重点不同:
进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位。
区别3:共享资源不同共享资源不同:
多个进程间不能共享资源,每个进程有自己的堆、栈、虚存空间(页表)、文件描述符等信息,而线程可以共享进程资源文件(堆和方法区)。
区别4:上下文切换速度不同上下文切换速度不同:
线程上下文切换速度很快(上下文切换指的是从一个线程切换到另一个线程),而进程的上下文切换的速度比较慢。
区别5:操纵者不同操纵者不同:
一般情况下进程的操纵者是操作系统,而线程的操纵者是编程人员。
总结
进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位。一个进程中至少包含一个线程,线程不能独立于进程而存在。进程不能共享资源,而线程可以。线程可以看作是轻量级的进程,它们的主要区别体现在:从属关系、描述侧重点、共享资源、上下文切换速度和操纵对象等不同。
相关文章
- 个推TechDay治数训练营第四期| 企业级标签体系建设实践
- 个推TechDay直播回顾 | 详解数据指标体系设计与开发全流程(附视频及课件下载)
- 电视剧里的代码真能运行吗?
- 网站都变成灰色了,它是怎么实现的?
- 河道采砂船监测识别系统
- 一种基于交叉选择的柯西反向鲸鱼优化算法QOWOA附matlab代码
- 辐射4 书籍代码-辐射4建筑代码及用法技巧(辐射4建筑代码怎么用)
- 笔记本键盘错误-电脑键盘失灵怎么办 三步教你解决问题
- 仪表盘读数识别系统
- 扫雷c语言程序设计-C语言实现简易版扫雷小游戏
- 有哪些好用的头像生成器?这5个你一定喜欢
- 预装恶意软件-教你如何用cmd命令清除流氓软件
- 笔记本键盘错误-笔记本键盘全部失灵怎么回事怎么恢复
- 预装恶意软件-小米手机将预装安全程序Guard Provider 但还是有隐忧
- 预装恶意软件-火绒安全软件个人版针对恶意修改系统文件权限行为防护的漏洞
- 笔记本怎样连接投影仪-局域网只能看到一部分电脑_电脑屏幕怎么投射到投影仪
- 红外热成像-万能的红外线热像仪 • 这五大应用场景,你都知道吗?
- 红外热成像-转:热红外成像光学系统之“冷”
- 排水口排水识别系统
- ps工具栏快捷键大全-超实在的PS快捷键