【多线程基础】 进程与线程之间的区别

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

欢迎志同道合的朋友一起加油喔🦾🦾🦾


前言

线程是进程的一个分支,一个进程至少有一个线程,多个线程共享一个进程的资源.


开始前先看一组非常传神的图例,相信可以帮助你更好理解进程与线程的概念:

      进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

  1. 进程包含线程,一个进程里可以有一个线程,也可以有多个线程 (每个线程都有自己的状态/优先级/上下文/记账信息)
  2. 进程和线程都是为了处理并发编程这样的场景 但是进程频繁创建和释放的时候效率低,相比之下,线程更轻量,创建和释放效率更好
  3. 操作系统创建进程,是要给进程分配资源,进程是操作系分配资源的基本单位,操作系统创建的线程,是要在CPU上调度执行,线程是操作系统调度执行的基本单位
  4. 进程具有独立性,每个进程有各自的虚拟地址空间,一个进程挂了不会影响其他进程,同一个进程中的多个线程,共用同一个内存空间,一个线程挂了可能会影响到其他的线程,甚至导致整个进程崩溃

在操作系统层面,每个线程都有一个线程控制块(Thread Control Block,TCB)来存储线程的相关信息。 因此,在Java多线程编程中,你可以理解为一个线程对应一个TCB,而不是PCB。同一个进程中的所有线程共享一个PCB(因为它们属于同一个进程),但每个线程都有自己的TCB。如果一个进程只有一个线程,那么这个进程就有一个PCB和一个TCB。

并行与并发的区别

1.并行:多个cpu同时执行多个任务

2.并发:一个cpu同时执行多个任务(采用时间片切换)

"时间片切换" 是一种 CPU 调度策略,用于实现并发。在给定的时间段内(这个时间段称为 "时间片"),操作系统将 CPU 赋予一个任务。当这个时间片过去时,操作系统会将 CPU 切换到另一个任务。这种切换发生得如此之快,以至于用户可能会觉得所有任务都在同时进行,但实际上在任何特定的微秒内,CPU 只在处理一个任务。这就是所谓的 "时间片切换"。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

书生-w

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

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

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

打赏作者

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

抵扣说明:

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

余额充值