重要主题

并发与并行

在深入理解计算机系统中,是这样定义并发与并行的。

并发(concurrency)是一个通用的概念,指一个同时具有多个活动的系统;并行(parallelism)指的是用并发使一个系统运行的更快。

感觉很抽象,有木有!嘿嘿,于是我机智的google了一下,在stackoverflow中找到了满意的答案。

Concurrency is when two or more tasks can start, run, and complete in overlapping time periods. It doesn’t necessarily mean they’ll ever both be running at the same instant. Eg. multitasking on a single-core machine.

Parallelism is when tasks literally run at the same time, eg. on a multicore processor.

并行可以在计算机系统的多个抽象层次上应用。在此,我们按照系统层次结构中由高到低的顺序重点强调三个层次。

线程级并发

在以前,即使处理器必须在多个任务间切换,大多数实际的计算也都是由一个处理器来完成的。这种配置成为单处理器系统
这里写图片描述
这里写图片描述
超线程,有时称为同时多线程是一项允许一个CPU执行多个控制流的技术。
对于超线程的解释,可以参考下面内容:

Intel的超线程技术,目的是为了更充分地利用一个单核CPU的资源。CPU在执行一条机器指令时,并不会完全地利用所有的CPU资源,而且实际上,是有大量资源被闲置着的。超线程技术允许两个线程同时不冲突地使用CPU中的资源。比如一条整数运算指令只会用到整数运算单元,此时浮点运算单元就空闲了,若使用了超线程技术,且另一个线程刚好此时要执行一个浮点运算指令,CPU就允许属于两个不同线程的整数运算指令和浮点运算指令同时执行,这是真的并行。

我不了解其它的硬件多线程技术是怎么样的,但单就超线程技术而言,它是可以实现真正的并行的。但这也并不意味着两个线程在同一个CPU中一直都可以并行执行,只是恰好碰到两个线程当前要执行的指令不使用相同的CPU资源时才可以真正地并行执行。

上面的解释来自知乎

指令级并行

在较低的抽象层次上,现代处理器可以同时执行多条指令的属性称为指令级并行。如果处理器可以达到比一个周期一个指令更快的执行速率,就称之位超标量处理器。

单指令、多数据并行

在最底层次上,许多现代处理器拥有特殊的硬件,允许一条指令产生多个可以并行执行的操作,这种方式称为单指令、多数据,即SIMD并行。例如,较新的Intel和AMD处理器都具有并行地对4对单精度浮点数(c数据类型float)做加法的指令。

计算机系统中抽象的重要性

这里写图片描述


参考资料:

  1. 《深入理解计算机系统》
  2. stackoverflow 并发并行区别
  3. 超线程的解释