Concurrency,是并发的意思。并发的实质是一个物理 CPU(也可以多个物理CPU) 在若干道程序(或线程)之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
从微观角度来讲:所有的并发处理都有排队等候,唤醒,执行等这样的步骤,在微观上他们都是序列被处理的,如果是同一时刻到达的请求(或线程)也会根据优先级的不同,而先后进入队列排队等候执行。
从宏观角度来讲:多个几乎同时到达的请求(或线程)在宏观上看就像是同时在被处理。
通俗点讲,并发就是只有一个 CPU 资源,程序(或线程)之间要竞争得到执行机会。图中的第一个阶段,在A执行的过程中B,C不会执行,因为这段时间内这个CPU资源被A竞争到了,同理,第二个阶段只有B在执行,第三个阶段只有C在执行。其实,并发过程中,A,B,C并不是同时在进行的(微观角度),但又是同时进行的(宏观角度)。
Parallelism,翻译过来即并行,指两个或两个以上事件(或线程)在同一时刻发生,是真正意义上的不同事件或线程在同一时刻,在不同 CPU 资源上(多核),同时执行。并行不存在像并发那样竞争、等待的概念,图中,A,B,C都在同时运行(微观、宏观)。
参考资料:
骑小猪看流星 必须要理清的Java线程池