并发与并行(concurrency and parallelism)的思考理解

附上一个基本概念:
并发(Concurrent)与并行(Parallel)的区别。

两本书里的解释:

1. 《疯狂java讲义》:

  • 并发:在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。
  • 并行:在同一时刻,有多条指令在多个处理器上同时执行。

2.《深入理解计算机系统》

  • 是一个通用的概念,指一个同时具有多个活动的系统;
  • 并发使一个系统运行得更快。并行可以在计算机系统的多个抽象层次上运用。

综合以上定义来看

其实深入理解计算机系统的定义更加基础,而疯狂java讲义比较易懂。

  • 从需求来看:
    • 想要计算机做得更多。
    • 想要计算机运行得更快。
  • 当处理器同时能够做更多事情时,这两个因素都会改进

解释:

  • 同时能做各种事情,也就是多核带来的性能提升,或者是单核的运算速度(频率)提升,这两个方式都能带来总性能的提升。

虽然并发原理的形成和研究已经超过50年的时间了,但是知道多喝和超线程系统的出现才极大地激发了人们的一种愿望,即找到书写应用程序的方法利用硬件开发线程级并行性。

理解:

  • 单核的频率提升已经出现了瓶颈,但是多核提升却很经济,因此能带来总性能的提升。
  • 在单核上使用多进程,主要是能够同时进行多项服务,但是在性能上并没有太大的提升,主要是在I/O操作上有所提升:
    • 在CPU等待I/O操作时不再等待,而是执行其他代码,现在这种优化一般在语言层面,比如java的NIO,以及golang的IO操作。这也是为什么在多核之前应用层面的程序员不太关注并发的原因。
    • 但是在其他方面,比如你计算1+2+…+100,即使你用单核并发,但是运算依旧是一个CPU的运算,不会带来提升,甚至更慢。
  • 在多核上使用并发进行并行运算,才能真正的提高运算性能,而不是减轻I/O操作导致的CPU等待。
    • 超线程:超线程通过共享单处理器的一部分原件,实现比如一个进程(线程)必须等到某些数据被装载到高速缓存中,那CPU就可以继续去执行另一个进程(线程)。从而实际上可以并行核心数的双倍的线程(这里的线程不同于程序的线程,层面不一样,但是概念相同)。比如四核8线程,就可以并行(在同一时刻,有多条指令在多个处理器上同时执行)执行8个线程。

你可能感兴趣的:(操作系统,并发,操作系统,并行,超线程)