先说结论,并发、并行并不对立,可同时存在。
什么是并发?
CPU运行速度远大于内存读取速度,为了充分利用CPU性能,不让它总是等着从内存里读数据,CPU时间片技术应运而生,可分时复用CPU,本质上来说,任一时刻只有一个线程在执行,但因为CPU执行得快,所以宏观上仍给人多线程同时执行的错觉。这是并发。
什么是并行?
多线程程序运行在具有多个核心的CPU上,这是人们常说的并行。即多个线程可以真正同时运行。
然而,多CPU核心、多线程情形下,且各线程不操作共享数据,才能算并行。因为,若是操作了共享数据,那必然在任一时刻,只能有一个线程操作共享数据,其他线程会阻塞,那应该是并发才对。
若线程数量大于CPU核心数,且各线程不操作共享数据,那么并发和并行同时存在。所以并发和并行并不对立。





