JavaEE初级--------第二章 认识线程

JavaEE初级--------第二章 认识线程



前言

在上一章,我们知道了进程是系统进行资源分配的基本单位。在多核CPU的时代,引入多进程来实现并发编程,但是如果需要频繁地创建/销毁进程,这个时候,开销就不能忽视了。多进程的缺点也就显而易见了,进程太重量,于是就会导致效率不高。为了解决上述问题,就引入了线程(Thread) 。


一、线程是什么

  • 线程也叫做“轻量级进程”。创建线程,比创建进程更快;销毁线程,比销毁进程更快;调度线程,比调度进程更快…。但是,线程不能独立存在,而是要依附于进程(进程包含线程)。当然,一个进程可以包含一个线程,也可以包含多个线程。

  • 一个进程,最开始的时候,至少要有一个线程。这个线程负责完成执行代码的工作,也可以根据需要,创建出更多的线程,从而使当前实现“并发编程”的效果

  • 上一章谈到的进程调度,都是基于“一个进程里只有一个线程”的情况。实际上,一个进程中,是可以有多个线程的。所以,一个进程可能使用一个PCB表示,也可能使用多个PCB表示,每个PCB对应到一个线程上,每个线程都有状态,优先级,上下文,记账信息…这些信息来辅助调度。除此之外,pid,内存指针和文件描述符表是共用同一份的。

  • 上述的结构决定了线程的特点:
    1、每个线程都可以独立地去CPU上调度执行
    2、同一个进程的多个线程之间,共用同一份内存空间和文件资源
    于是,创建线程的时候,不需要重新申请资源了,直接复用之前已经分配给进程的资源,省去了资源分配的开销,那么,创建的效率就提高了。

  • 进程是资源调度的基本单位

  • 线程是调度执行的基本单位

在这里插入图片描述

  • 打个比方,我们毕业了去开一家工厂,一开始没有很多的启动资金,租了一个工厂只能开一条生产线1,随着时间的推移,生意也是越做越大,也积累到了一定的资金。这时候,就想着扩大规模,正常人的思维肯定是在工厂里再加一条生产线2,不会去想着再开另一家工厂,因为在原有的基础上,可以共用原来的工人,共用原有的物流体系,那样不就比再开一家工厂降低了很多的成本,于是后面生产线3和生产线4越来越多。要知道,从0到1是很难的,但是从1到一百却是相对轻松的,复制成功比探索成功简单的多。这里,工厂就是一个进程,这些生产线就是线程,这样来看,是不是一眼就能看出来创建线程比创建进程要轻量地多,而且后面多线程的创建的效率也提高了不少

二、进程和线程的区别(经典面试题)

  1. 进程包含线程,一个进程里至少有一个线程,也可以有多个线程。
  2. 进程和线程,都是用来实现并发编程场景的。(但是线程比进程更轻量,更高效)
  3. 同一个进程的线程之间,共用同一个资源(内存+硬盘),省去了申请资源的开销
  4. 进程和线程之间,是具有独立性的。同一个进程内的线程和线程之间,是可能会相互影响的(线程安全问题 + 线程出现异常)
  5. 进程是资源分配的基本单位
    线程是调度执行的基本单位

总结

现在,大家应该明白了什么是进程,什么是线程了吧,以及两者之间的联系和区别。最重要的就是要记住,进程是资源分配的基本单位,线程是调度执行的基本单位

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值