JavaEE——进程和线程的联系与区别

前言

进程和线程之间有着千丝万缕的联系,也存在着很大的区别。

一、联系

1. 线程作为“ 轻量型进程 ”,它与进程之间的关系是一种被包含的关系,也即是:进程包含线程。

2. 一个进程内可以有一个线程或者多个线程,但是至少含有一个线程而不会出现一个都没有的情况。同属于一个进程的线程共同使用该进程的 cpu 、内存、硬盘等硬件资源。这是由于创建进程时就已经分配好了资源,而后续创建出属于该进程的线程时,就省去了分配资源这一环节,直接都使用该进程的资源即可。

那么线程中共享的资源是哪些呢?又有没有哪些资源是每个线程自己独有的?这一点我们可以从代表每一个线程的 pcb 中得出:

同属于一个进程下的线程,它们 pcb 中的内存指针、文件描述符表等代表硬件资源的信息,其表示的内容都是一样的,而上下文、状态、优先级、记账信息等与  cpu 调度相关的属性,则每个线程都不相同。
3. 进程和线程都使用 PCB 来进行表示。这种情况其实比较容易混淆,因为毕竟进程和线程还是两个很大不同的东西,但是都使用 PCB 来表示,就容易造成混乱。

但是我们须知道:

一个线程就对应一个 PCB;

一个进程包含一个或者多个线程,因此一个进程就对应着一组 PCB。

二、区别

1. 上面的第二点中我们说到,属于同一个进程的线程,它们之间的表示硬件资源的信息就都相同,表示调度的信息就都不相同,由此就可得出进程与线程之间的第一个不同之处:

进程是操作系统分配资源的基本单位;

线程是操作系统进行系统进行调度执行的基本单位。

2. 由于进程都各自向操作系统申请了空间,因此它们都有自己独立的内存空间,且其他进程无法直接访问,从而进程之间不会相互影响——进程的独立性,这一特性便大大提升了系统的稳定性。

但是线程就不同了,由于同属于一个进程,它们就需要共用同一块内存空间,它们也都享有访问这整块内存空间的完整权限,因此线程之间就会相互影响,通俗点来说,“ 同在一个屋檐下 ”的进程没有“ 隐私 ”这一说法。因此线程之间便会相互影响,例如:一个线程出现问题,整个进程可能就会直接崩掉,从而属于这一进程下的其他线程也会直接挂了。

总结

进程和线程之间并无优劣之分,并不能说它们其中哪个比较好( 毕竟也有可能两个都不咋滴嘛……)。它们各自有各自的好处,线程消耗的资源少,进程又具有相对的独立性和隔离性。虽然 Java 中更常使用的是线程,但是线程也有很多不足之处,也有比它消耗更少资源的“ 轻量级线程 ”——纤程,因此都需要好好掌握。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值