当前位置: 首页 > article >正文

进程和线程的区别详解

                                          

  • 🎥 个人主页:Dikz12
  • 📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香
  • 欢迎大家👍点赞✍评论⭐收藏

目录

 进程

进程在系统中是如何管理的

 进一步认识PCB

线程

 能否一直增加线程数目来提高效率

进程和线程的区别 


 进程

 进程:就是正在运行的程序.

 通过这个图片,可以看到每个进程想要执行,都需要消耗一定的系统资源。

每个进程,都是系统资源分配的基本单位.

进程在系统中是如何管理的

 主要考虑两个方面:

1.描述:就是使用类 / 结构体,把被管理的一个对象,这个属性都表示出来。(系统专门有一个结构体描述进程得属性,这个结构体被称为“进程控制块”--PCB).

2.组织:使用数据结构,类似于双向链表 这样的数据结构,把这些表示出来的对象,串起来.(方便后续的增删改查).

想更明确的认识进程特性,就需要进一步认识PCB里面的属性!!!

 进一步认识PCB

 1.pid:进程的身份标识. 

 每一个进程都会有一个pid,同一时刻,不同进程之间的pid是不同的.

2.内存指针

  每个进程在运行的时候,都会分配一定的内存空间.这样的内存空间,具体在哪里,以及分配的空间有哪些部分,每个部分都是干什么的???都是有一组指针来进行区分的.

也就是描述了进程的“内存资源”是什么样子的.

3.文件描述符表

 类似于顺序表 这样的数据结构,和文件有关 => 硬盘 有关.

一个进程也会涉及到硬盘操作,就需要按照文件来操作,进程都操作了那些文件就是通过文件描述符表.描述了进程持有的“硬盘资源”.

 PCB中还引入了一些属性,用来支持操作系统实现 进程调度 的效果.

1.进程的状态 (比如:就绪、阻塞.....)

2.进程的优先级 . (有些进程会给更高的优先级,优先调度)

3.进程的上下文. (可以理解为:读档、存档.)

4.进程的记账信息 (通过优先级机制,对不同的进程分配了不同权重的资源)

线程

 引入多个进程的初心是什么??

实现并发编程 (现在是多核CPU时代)

 多进程,实现并发编程,也有明显的缺点.太重量。效率不高。

如果频繁的创建 /  销毁 进程,开销是不容忽视了.

为了解决上述问题,就引入了“线程”(Thread),也叫做“轻量级进程”.

 所以,每个线程,都是可以独立的进行调度的,每一个线程,也有状态,优先级,上下文,记账信息......。一个进程,使用PCB表示,一个进程可能使用一个PCB,也可能使用多个PCB表示,每个PCB对应到一个线程上;前面谈到的,pid、内存指针、文件描述符表也是共用同一份的。

创建线程就不需要重新申请资源了. 直接使用分配给进程的资源,省去了资源分配的开销,所以创建效率就更高了!!!

 能否一直增加线程数目来提高效率

所以,线程多了,可能会产冲突,被称为“线程不安全问题”。

如果某个线程抛出异常,没有妥善处理,就可能把整个进程搞崩溃,其它线程也会因此消失.

进程和线程的区别 

1.进程是资源分配的基本单位;线程是调度执行的基本单位。

2.进程包含线程,一个进程至少有一个线程,也可以有多个。

3.进程 和 线程 都是用来实现 并发编程, 线程比进程更高效、更轻量。

4. 进程 和 进程 之间具有独立性,一个挂了不会影响到另一个;同一个进程的 线程和 线程之间是可能相互影响的。 (线程安全问题 + 线程异常)


http://www.kler.cn/a/228952.html

相关文章:

  • Spark常见面试题-部分待更新
  • 记录 idea 启动 tomcat 控制台输出乱码问题解决
  • CSS:语法、样式表、选择器
  • 微软开源GraphRAG的使用教程(最全,非常详细)
  • 在Linux上如何让ollama在GPU上运行模型
  • 记录一次 centos 启动失败
  • [office] excel中weekday函数的使用方法 #学习方法#微信#媒体
  • C语言递归与迭代并举:双重视角下的C语言阶乘计算实现
  • Go指针探秘:深入理解内存与安全性
  • PHP漏洞查询
  • V2X,启动高增长引擎
  • FCIS 2023:洞悉网络安全新态势,引领创新防护未来
  • undefined symbol: avio_protocol_get_class, version LIBAVFORMAT_58
  • 红队渗透靶机:LEMONSQUEEZY: 1
  • Spring IOC 之深入分析 Aware 接口
  • 链接的地址怎么做二维码?网页快速生成二维码的做法
  • springboot(ssm船舶监造系统 船只生产管理系统Java系统
  • 谷歌产品大更新:Bard可生成图像;文生音乐平台等5大免费功能
  • 编程笔记 html5cssjs 072 JavaScript BigInt数据类型
  • TreeSet 集合
  • 管理类联考-复试-全流程演练-导航页
  • uniapp父子组件通信
  • 【问题解决】如何将一个服务器的docker迁移到另一个服务器
  • 【issue-YOLO】自定义数据集训练YOLO-v7 Segmentation
  • css1基础选择器
  • OfficeWeb365 Readfile 任意文件读取漏洞