进程和线程有何区别与联系

进程和线程有何区别与联系

什么是进程?

首先我们要了解进程和线程的区别和联系我们先看看什么是进程.
进程,我们们可以通俗的理解为,是操作系统提供的一种"软件资源",目前我们大多数使用的系统都是"多任务操作系统".
进程是系统分配资源的基本单位这句话是一个重点哦

进程管理是什么?

进程管理主要是分为描述和组织.
描述的话是使用类/结构体这样的方式,把实体属性给列出来(用pcb)
组织是使用一定数据结构,把这些结构体/对象,串在一起(用双向链表)

pcb的核心属性是什么?

1>pid(进程的身份标识):此处是通过一个简单的不重复整数来区分的,系统会保证同一机器上,同一时刻,每个进程pid都是唯一的.
以此后续要针对某个进程进行操作,都可以拿pid进行区分.

2>内存指针(一组) :每个进程都必须使用自己申请的内存,内存指针就是用来描述进程使用内存指针的情况.

3>文件描述符表: 对硬盘这样的硬件设备,进行了封装,变成我们在电脑上文件管理器看见的文件的样子.

4> 状态 : 分为就绪状态和阻塞状态

5> 优先级
6>记账信息
7>上下文 :支持进程调度的重要性属性,相当于游戏的存档和读档

内存分配–内存管理

1>核心结论:每个进程的内存,是彼此独立的,互不干扰的,通常情况下,进程a,不能直接访问进程b的内存.
这是为了系统稳定性,在某个进程出问题时候,不会影响其他进程.
这种情况也叫进程的独立性!!!
2>进程间的通信:首先,与进程的独立性是互不干扰,不冲突的
系统会提供一些公共的空间(多个进程都能访问到的),让两个进程借助这种公共的空间来交互数据.

所以本质上来说,进程是用来解决"并发编程问题".

3>进程在调度时候是"分时复用",进程消耗的内存,也是在内存空间上"分时复用"的
意思就是当前没在设备上运行的进程,所消耗的内存空间,可以暂时不必真正放到内存上,可以暂时放到硬盘的特定区域(swap空间),等进程真正执行时候,再把这个数据载进去.

为什么会有线程?

有些场景下,要频繁的创建和销毁进程时候,此时使用多进程编程,系统开销就很大.所以就有了线程

什么是线程?

线程 :也可以称为"轻量化进程",在进程的基础上改进并保持了独立调度执行,这样的"并发支持",同时省去"分配资源","释放资源"带来的额外开销.

在前面的时候,有一个pcb的属性是内存指针,在多个线程的pcb的内存指针中,指向的是同一个空间.
这个就意味着只是创建一个线程的时候,需要从系统分配资源,后续的线程就不用再分配了,直接共用前面那一份资源即可.

进程和线程的关系?

在有线程之前,进程是扮演两个角色的,(资源分配的单位,调度执行的单位),在有了线程以后,工作就分开了,进程专注于资源分配,线程专注于调度执行.

1>线程数量太多了会怎么样?
线程数量太多了,线程之间就会互相竞争CPU的资源,但是cpu的核心数是有限的,所以数量太多非但不会提高效率,反而会增加调度的平衡

2>线程之间若是起了冲突,就会导致代码中出现一些逻辑错误,(线程安全问题!!!)

3>共享资源的副作用?
一个线程如果抛出异常,并且没有处理好,就会导致整个进程被终止!

小结

1>进程是包含线程的
2>每个线程,也是一个独立的执行流,可以执行一些代码,并且单独参与到cpu的调度中,
3>每个进程有自己的资源,进程中的线程共用这一份资源(内存空间和文件描述符表)
4>进程和进程之间不会相互影响,但是线程会
5>同一个进程中的线程之间,可能会互相干扰,引起线程安全问题.
6>线程不是越多越好,合适就行,如果线程太多,调度开销会非常明显.

  • 31
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小董是不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值