单核多线程、多核多线程

1.时间片

    多任务系统往往需要同时执行多个任务,任务数往往大于系统的处理器数。然而,一个处理器同时只能执行一个任务(线程),那么如何让用户感觉这些任务(线程)正在同时进行呢?操作系统的设计者巧妙地利用了时间片。
    时间片是处理器分配给各个任务(线程)的时间。
 

2.多线程

2.1 线程上下文

    线程上下文 是 指某一时间点处理器的 寄存器 和 计数器 中的内容。
 

2.2 线程上下文切换

    处理器通过 时间片分配算法 来循环执行任务(线程)。在两个时间片之间需要切换线程上下文。
    由于时间片非常短,所以处理器需要频繁地切换线程上下文。
 

2.3 单核处理器

    在单核处理器中,多个线程在一个处理器上一个接一个执行(并发)。如果两个线程各自花费10us执行,那么在1核处理器系统上,净时间为20us。
    在单核处理器中,多线程一定存在线程上下文切换。
 

2.4 多核处理器

    在多核处理器中,多个线程在不同的处理器上同时执行(并行)。如果两个线程各自花费10us执行,那么在2核处理器系统上,净时间为10us。
    在多核处理器中,多线程不一定存在线程上下文切换,但当线程数大于处理器数时,就一定存在线程上下文切换。
 

2.5 多线程的缺点

    线程创建开销、线程上下文切换开销
 

3.单核处理器多线程的意义

    举一个例子来说明问题:在单核处理器中,需要执行4个任务,那么有如下两种执行方式:
单核多线程、多核多线程_第1张图片
    第一种方式,存在很多次线程上下文切换。第二种方式,只有很少几次线程上下文切换。我们知道线程上下文切换是很消耗性能的,那么理论上是第二种方式更快。如果确实是这样,那么单核处理器多线程(第一种方式)还有意义嘛?

    我们需要清楚的认识到多线程会提高效率到底指的是什么?实际上,多线程会提高效率是跟 I/O 操作相关。I/O 操作包括磁盘 I/O、网络 I/O。
    以磁盘 I/O 来说,实际上当处理器需要磁盘中的某些文件时,并不是直接向磁盘要数据,而是交给 DMA 来完成磁盘的数据读取,操作如下:
单核多线程、多核多线程_第2张图片
    从上图我们可以发现处理器在将指令告诉 DMA 之后就处于空闲状态了。如果磁盘读取的数据较大,则会长时间停留在第3步。那么,处理器空闲下来的时间,为啥不好好利用起来呢?因此,就出现了多线程,当一个任务被执行到第3步时,此时处理器是空闲的,那么我们就切换线程,让处理器执行其他任务(线程),从而提高整体的完成效率。
 
单核多线程、多核多线程_第3张图片

你可能感兴趣的:(计算机操作系统,计算机操作系统)