温故知新(链接、装载与库01)

温故知新

X86硬件结构

北桥(PCI Bridge)

北桥用于与显卡、CPU、多级缓存、内存等高速设备进行数据交换。

南桥 (ISA Bridge)

南桥用于与低速外设进行数据交换,如硬盘、USB、键鼠等低速设备。

SMP与多核

对称多处理器(SMP)指硬件结构中有多个物理上独立的多个处理器,可以提高运行速度,但价格昂贵

多核处理器,指的是将多颗核心封装在一颗CPU上,共享昂贵的缓存部件,价格比普通处理器高一点而已,多核可以看成是SMP的简化版本,宏观上SMP和多核并无太大区别。

线程

线程,又叫轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。

线程之间共享程序的内存空间(包括代码段、数据段、堆等),进程级的资源(打开文件、信号等)

使用多线程的原因
  • 某个操作会陷入长时间等待,等待的线程会进入睡眠状态,无法继续执行。多线程执行可以有效利用等待时间。例如等待网络响应
  • 某个操作会消耗大量的时间,如果单线程执行就无法与用户交互,多线程可以一个负责计算,一个负责交互
  • 程序逻辑本身就要求并发操作,例如多端下载软件
  • 多CPU或多核2计算机,本身具备同时执行多个线程的能力,因此单线程程序无法全面地发挥计算机的全部计算能力
线程访问权限

线程私有空间

  • 线程局部存储(TLS)
  • 寄存器

可重入与线程安全

可重入是并发安全的强力保障,一个可重入的函数可以在多线程环境下放心使用

可重入函数的特点
  • 不使用任何局部静态或全局的非const变量
  • 不返回任何局部静态或全局的非const变量的指针
  • 仅依赖于调用方提供的参数
  • 不依赖任何单个资源的锁,mutex等
  • 不调用任何不可重入的函数
过渡优化

1.编译器为了优化程序效率,会交换指令的执行顺序等,不保证原子性

2.cpu的乱序执行能力,为了提升效率,导致破坏了原子性

volatile
  • 阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回
  • 阻止编译器调整操作volatile变量的指令顺序
barrier指令

许多体系结构的CPU都提供该指令,不过他们的名称各不相同。CPU保证在barrier前的指令一定比后面指令先执行

多线程内部情况
一对一模型

一个用户线程唯一对应一个内核线程。在linux中通过clone(带有CLONE_VM参数)产生的线程就是一个一对一线程。

优点:

线程之间的并发是真正的并发,一个线程因为某原因阻塞时,其他线程执行不会受到影响。该模型也可以让多线程程序在多处理器的系统上有更好的表现。

缺点:

由于许多操作系统限制了内核线程的数量,所以用户线程数量也跟着受到了限制

许多操作系统内核线程调度时,上下文切换的开销较大,导致用户线程的执行效率下降

多对一模型

该模型将多个用户线程映射到一个内核线程上,线程之间的切换由用户态代码进行,因此比一对一模型在线程切换上要快很多。

缺点

如果其中一个用户线程阻塞,那么所有线程都无法执行,因为此时内核线程也随之阻塞了。

在多处理器系统上增加处理器,性能的提升微乎其微。

优点

高效的上下文切换

几乎不受限制的线程数量

多对多模型

该模型结合了上面两种模型的特点,将多个用户线程映射到少数但不止一个内核线程上。

解决了多对一模型中因为用户线程阻塞而引起全部线程阻塞的缺点,在多处理上增加处理器对性能提升有一定帮助,但和一对一模型比还是少一些,继承了多对一模型的全部优点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

omnibots

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

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

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

打赏作者

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

抵扣说明:

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

余额充值