<JaveEE>线程是什么

目录

一、线程是什么

1.为什么要引入线程

2.线程是什么?

3.线程是如何提高效率减少资源开销的?

小结:线程进程的关系区别(经典问题,面试高频考点)


一、线程是什么

1.为什么要引入线程

多任务操作系统希望能够同时运行多个程序,于是引入了进程,进程很好的解决了并发编程这样的问题,有些操作系统只有进程这个概念,没有线程,但是在一些特定的情况下,进程的表现不尽人意,比如有些场景下,需要频繁的创建和销毁进程的时候,此时使用多进程编程系统就会开销很大,其中最关键的原因是资源的申请和释放,一个进程刚刚启动的时候,首当其冲就是内存和资源,进程需要把依赖的代码和数据从磁盘读取到内存中,对于系统来说,分配内存并不是一件容易的事情,一般来说,申请内存的的时候需要指定一个大小,系统内部就把各种大小的空间内存,通关一定的数据结构给组织起来,实际申请的时候需要去这样的空间去查找,找到个大小合适的内存分配过来.线程的出现就是为了解决上述问题方案.

上图中,一个进程有一个PCB,但是实际上,一个进程可以有多个PCB.

2.线程是什么?

线程,也可以成为"轻量级进程",在进程的基础上做出来改进,保持了独立调度执行,这样的"并发支持",同时省去了"分配资源""释放资源"带来的额外开销,⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 "同时" 执⾏ 着多份代码,引入线程之后,线程成了操作系统资源调度的基本单位,而进程为资源分配的基本单位.(前面介绍了会用PCB来描述一个进程,现在也可以用PCB来描述一个线程,线程的PCB中也有状态,优先级,记账信息,上下文......)

PCB中有一个属性是内存指针,多个线程的PCB的内存指针指向的是同一个内存空间,这样就意味着只是创建第一个线程的时候需要从系统分配资源,后续的线程就不必分配资源,直接共用前面的那份资源就可以了,除了内存之外,文件描述符表(操作硬盘)也是多个线程共用一份,但也不是随便搞两个进程就能实现资源共享,把能够资源共享的这些进程分成组,成为线程组,线程组也就是进程的一部分.有了线程之后,进程专注于资源分配,线程负责调度执行.一个进程中至少要包含一个线程,创建第一个线程的同时,进程也就出现了.

3.线程是如何提高效率减少资源开销的?

举个例子,一个人在一个房间中吃100只鸡,这个事情是很消耗时间的,那么如何加快效率呢,有一种方案是找两个房间,找两个人,每个人吃50只,这样速度一定会大幅度提升,这个例子中,我们可以把房间看作是进程,创建新的进程就需要申请更多的资源,也就是这里的房间和桌子,这就是多进程提供给我们的方案.

那么多线程提供给我们的方案是什么呢?房间和桌子没有增加还是原来那些,我们只是单独增加吃鸡的主角,此时两个人在同一个房间一个人吃五十只,仍然能够提高效率,并且这种方案开销更小,因为我们不需要新增房间(资源的分配和销毁).

那如果我们继续增加吃鸡的人数,每个人需要吃的鸡数目少了,效率会提高,并且这些人共享着同一份资源,但引入的人是越多越好吗?当然不是,这些人会因为桌子不够大,坐不下,也就没办法吃,甚至因为不够吃互相争抢,同理,当我们引入的线程达到一定的数量之后,再继续尝试引入新的进程效率好像就没办法提升了,当线程数量太多的时候,线程之间就会互相竞争CPU的资源了,CPU的核心数是有限的,非但不会提高效率,反而还会增加调度的开销.多线程还有一个重要的问题,线程之间可能会打架,线程之间起了冲突就可能会导致代码中出现一些逻辑上的错误(线程安全问题),多线程还有一个问题,共享资源也会有副作用,一个线程如果抛出异常,并且没有处理好,就可能会导致整个进程被终止.

小结:线程进程的关系区别(经典问题,面试高频考点)

1.进程是包含线程的

2.每个线程,也是一个独立的执行流,可以执行一些代码,并且单独的参与到 cpu 调度中.(状态,上下优先级,记账信息,每个线程有自己的一份)

3.每个进程,有自己的资源,进程中的线程共用这一份资源(内存空间 和 文件描述符表)进程是资源分配的基本单位,线程是调度执行的基本单位)

4.进程和进程之间,不会相互影响,如果同一个进程中的某个线程,抛出异常,是可能会影响到其他线程,会把整个进程中的所有线程都异常终止,(掀桌)

5.同一个进程中的线程之间,可能会相互干扰,引起线程安全问题

6.线程也不是越多越好,要能够合适,如果线程太多了,调度开销可能非常明显.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值