多线程(一) 认识线程

线程

如果把一个进程想象成一个工厂
线程就是工厂中的若干流水线

线程的特点

  • 线程是包含在进程中的
  • 一个进程中可能有多个线程
  • 每个线程都有一段自己要执行的逻辑(指令),每个线程都是独立的"执行流"
  • 同一个进程中的很多线程之间,是共享了一些资源

线程的介绍

  • 所谓的 “线程” 可以理解成是一种轻量级的 “进程” ,也是一种实现并发编程的方式
  • 创建一个线程比创建一个进程的成本低,销毁一个线程比销毁一个进程的成本也低
  • 成本低的原因是,新创建一个线程,并没有去申请资源,销毁线程也不需要释放资源,让线程在进程内部公用之前的资源
  • 如果新创建一个进程,就需要给这个进程分配比较多的资源
  • 实际进行并发编程的时候,多线程比多进程方式更加常见,效率也更高

同一个进程的多个线程之间的共享资源主要是两方面

  1. 内存资源(但是两个不同进程之间的内存不能共享)
  2. 打开的文件

但是也有不共享资源

  1. 上下文 / 状态 / 记账信息 / 优先级(每个线程要独立参加CPU的调度)
  2. 内存中有一块特殊的区域, 栈 空间上每个线程要独立一份

使用的原因

  1. 线程比进程轻量,并发编程的效率更高
  2. 线程之间共享的资源多,完成一些操作时更方便

线程是如何创建的

当创建一个进程的时候,就会自动随之创建一个线程(主线程)
一个进程被创建出来的时候,至少会随之创建一个线程

进程是操作系统分配资源的最小单位
线程是操作系统进行调度和执行的最小单位

所谓操作系统对进程调度,本质上就是操作系统针对这个进程的若干个线程进行调度
在这里插入图片描述

一个线程是一个PCB
一个进程是多个PCB (使用线程组 id 来表示哪些PCB 从属与同一个进程)

线程和代码有啥关联?

可以认为,一个线程就是代码中的一个执行流 (按照一定的顺序来执行一组指令)

进程和线程的区别和练习(面试题)

  1. 进程是包含线程的一个进程里可以有一个线程,也可以有多个线程
  2. 进程和线程都是为了处理并发编程这样的场景,但是进程在频繁创建和释放时效率低,相比之下,线程更加轻量,创建和释放效率更高(因为少了申请释放资源的过程)
  3. 进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位 (以PCB为单位进行调度)
  4. 每个进程都有独立的内存空间,每个进程有各自的虚拟空间,一个进程挂了,不会影响到其他进程,同一个进程的多个线程之间,共用这个虚拟地址空间,所以一个线程挂了,可能会影响到其他线程的,甚至导致整个进程崩溃

一个进程中线程并不是越多越好

并发能力达到上限了,继续增加线程不会再提高效率,反而会降低效率(线程的调度也是有开销的)

一个进程最多能搞多少线程呢?

  1. CPU的个数相关

  2. 和线程执行的任务类型也相关

1.CPU密集型 : 程序一直在执行计算任务
2.IO 密集型 : 程序没咋进行计算,主要进行输入输出操作

多线程程序还是有问题的

  1. “线程不安全”
  2. 线程如果抛出异常,没有很好地的处理这个异常的话,整个进程会被直接终止,其他线程也没法继续工作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

w_xhjk

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

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

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

打赏作者

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

抵扣说明:

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

余额充值