多线程透析--进程和线程底层分析,在系统中线程执行过程

多线程透析–进程和线程底层分析

1.什么是进程?
程序启动后分配到内存,资源分配的基本单位,比如qq.exe。
2.什么是线程?
程序执行的基本单位。

怎么了解以上两个含义的解释呢?我们从CPU底层来理解下:
在这里插入图片描述
一个程序被启动后,会进入到内中变成:指令+数据。
在这里插入图片描述
就是说一个进程执行后,会被分配到内存中,变成一个或者多个指令和数据,而这样的指令+数据就是一个个线程。

3.程序如何开始运行的?

记住操作系统执行程序都是由CPU来操作的,而CPU只会执行处理线程。
那先了解下的CPU中几个核心的部件:

Registers:寄存器,用来存储线程中数据。
PC:程序计数器,用来记录程序执行的位置。
ALU:数据逻辑单元,用来专门做计算的。
cache:缓存,用户线程切换时,存储记录上个线程执行现场。

举个例子,现在有个程序需要做个计算 a = 1+2 的计算工作,那CPU是怎么工作的呢?

程序执行时,a=1+2 会被分配到内存中,a被分配一个内存空间,2和3就是数据。

  1. 同时执行的时候PC记录线程执行的位置。
  2. CPU通过IO一系列设备获取到内存中的,把2和3放到寄存器Register中。
  3. 由ALU进行计算工作,计算出来的值3,运行出的结果返回内存,放入内存a中。

在这里插入图片描述
这个过程就完成了线程的执行。

4.线程如何进行调度?(用户态和内核态。这块理解我不一定对,以下是个人观点)

1.用户态线程调度(上面讲述的线程CPU调度形式)。

用户态线程:指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,用户进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。用户线程不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。

2.内核态线程调度。
.内核态线程:这种线程执行在内核态,可以通过操作系统的调用创造一个内核级线程。

通过以上分析,我们可以知道线程要想执行,是必须要跟硬件打交道的,主要硬件就是CPU。但是程序直接跟硬件打交道是有很大风险的,所以后面就诞生了OS(Operate system)操作系统的程序。线程阻塞后会被加入到操作系统队列中,让其它线程继续执行,这种被叫做内核态线程

OS操作系统通过调度策略(CFS)将一个个线程调度执行,保证所有的线程都有机会被调度,而不是单纯的随机调度。
在这里插入图片描述
内核态线程优势:

  • 可以利用多核 CPU 优势:内核拥有较高权限,因此可以在多个 CPU 核心上执行内核线程。
  • 操作系统级优化:内核中的线程操作 I/O 不需要进行系统调用;一个内核线程阻塞了,可以立即让另一个执行。

内核态线程缺点:

  • 创建成本高:创建的时候需要系统调用,也就是切换到内核态。
  • 扩展性差:由一个内核程序管理,不可能数量太多。
  • 切换成本较高:切换的时候,也同样存在需要内核操作,需要切换内核态。

内核态线程需要与操作系统os打交道,而用户态线程是与操作系统无关的,所以当用户态线程使用到系统内容时,就会被切换到内核态,此切换过程是个消耗效率的过程。

5.线程切换的概念是什么?

线层切换Context Switch:CPU保存现场,执行新线程,恢复线程,继续执行的一个过程。

线程被调度的时,应为调度策略针对很多和线程,它不会让一些线程始终处于不被调度状态,所以CPU会执行一会线程之后切换下一个线程。这样就会有一个问题,要是上一个线程没有结束怎么办呢?
就是上面提到了cache缓存,没有结束的线程会被加入到cache中记录起来,这个叫保存执行现场。下次调度到这个线程的时候就继续执行。

PS:是不是一个程序利用多线程就一定会效率更好?
不是: 因为线程执行中会有线程切换的步骤,所以简单的程序利用多线程,线程切换会消耗CPU降低效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Survivor001

你可以相信我,如果你愿意的话

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

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

打赏作者

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

抵扣说明:

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

余额充值