线程与进程

1.为什么要有线程

明明多进程已经很好的实现了并发编程的效果,为什么还要引入线程?

因为进程有一个明显的缺点:太重了!!!(消耗资源更多,速度更慢)

如果进程创建销毁不频繁还好,一旦需要大规模频繁的创建和销毁,开销(给进程分配的资源)就比较大(需要申请和释放资源)

所以引入了轻量级进程,也就是线程,更高效的解决上述问题

2.线程的概念

  • 一个进程至少要包含一个线程,最初创建出来的可以视为是一个只包含一个线程的进程(由于此时创建的过程需要分配资源,所以第一个线程的创建开销可能比较大)
  • 其实创建的还是进程,在创建进程的时候,把资源都分配好,后续创建的线程都在进程内部,可以认为是进程包含了线程,并且后续创建的新的线程,直接复用前面进程里创建好的资源即可,就可以省略分配资源的过程,资源已经有了
  • 这个进程中的多个线程,共同复用了进程中的各种资源(内存,硬盘...)
  • 线程同样也是通过PCB来描述的,此时一个PCB对应一个线程,多个PCB对应一个进程
  • 这些线程各自独立在CPU上进行调度(状态,上下文,优先级,记账信息......各有各的一份),即线程是系统调度执行的基本单位
  • 同一个进程的多个PCB中,内存指针和文件描述符表的内容是一样的,但状态,上下文,优先级,记账信息......等支持调度的属性是不一样的
  • 当然不是说创建线程一点资源都不消耗,只是比创建进程更轻量而已
  • 线程太多的时候,线程调度的开销也会降低整个程序的效率                                                        
  • 举个例子:                                                                                                                                  在一张只能容纳8个人的桌子上,有十个人入席,那就只能这八个人先吃,吃完才能挤出位置给后面的人,而且这八个人吃的时候可能会因为太挤而不好夹菜,所以这个效率肯定不如只有八个人高,降低了整体的效率
  • 就比如:一个CPU的逻辑核心数是一定的,如果线程的数量超过了内核的核心数,那么效率就不会提高,并且线程调度的开销会更大

3.线程和进程的工作原理

举个简单的例子,如果一个工厂里只有一个车间,为了提高收入,工厂会增加车间

下面分别按多进程和线程的方式来展示工厂的操作方式

3.1 进程

按照多进程的方式,是又建造了其它工厂及车间,由此来提高目的.

3.2 线程

对于线程来说,只是在原有的工厂里增加了一个车间,开销较小,比进程更轻量.

4.线程的安全问题

4.1 问题一

举个例子:

此时,有两个人看上了同一条鱼,这两个人就可能去争抢,就会发生冲突

就比如多个进程同时去访问同一个变量,就会出现线程不安全的问题

但是多进程就不存在这个安全问题,因为每个进程已经分配了独立的地址空间

4.2 问题二

举个例子:

还是刚刚问题一的情况,如果当这两个了起了冲突,没人成功劝阻,这时其中一个人不乐意了,就想着我不吃,谁都别想吃,直接把桌子给掀翻了

就比如一个线程一旦抛出异常,没有及时处理,就可能会导致整个进程异常结束

5.线程和进程的区别与联系[面试题][重点]

  1. 进程包含线程,一个进程里至少包含一个线程,也可以包含多个.                                                 
  2. 多进程和多线程都是为了实现并发编程的方式,线程是轻量级进程.                                            创建线程比创建进程更快. 销毁线程比销毁进程更快. 调度线程比调度进程更快.
  3. 进程是系统分配资源的基本单位,线程是系统调度执行的基本单位.
  4. 进程比线程更安全.                                                                                                                  进程有独立的地址空间,彼此之间不会相互影响到,即进程具有独立性,保证了系统的稳定性.    但是多个线程共用一份地址空间,多个线程之间容易相互影响,一个线程一旦抛出异常,就可能会导致整个进程异常结束,所以进程比线程更安全.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值