并发与并行区别?
1、并发与并行,都是为了让计算机同时能够做更多的事情。
2、英语翻译 concurrency (并发)、parallelism(并行)。并发是并行的模拟。
3、计算历史发展,单核cpu,为了达到 “同时能够做更多的事情",让cpu 时间切片来运行
进程或者线程。这样的运行叫concurrency 。
4、并行是为了让并发执行的更快。(三个层次优化)
4.1 提高线程并发执行速度,出现了多核cpu,超线程技术(cpu 的部分组件有备份,比如两个 程序计数器 PC ,其他组件共享),多核处理让系统减少了模拟并发执行的需要。提高了执行效率
4.2 cpu 流水线执行指令,提高了指令的执行速度。-- 并行执行指令。
4.3 单指令,多数据并行(SIMD 并行),一条指令可以产生多个并发的操作。
4.4、程序设计,将有竞争(同步)的任务拆分成小的任务,让小的任务能够并行执行。能够提高程序执行效率 。concurrency ---->parallelism (jdk8 中的stream 使用parallelism处理)
5、并发执行(Dealing),可能需要多个活动间需要协调共享资源,并行(Doing)是独立的执行。
6、由于线程并发执行,线程的开始执行有先后关系。才能使的线程的同步(锁,happen-before)可以实现。(如果是并行,两个线程同时,获取锁。哪一个线程能够获取到锁?-- 同一时刻只能一个线程(cpu)访问同一内存地址,如存在同时有多个线程访问,则会使用总线仲裁来解决冲突)
总结:
从关注的问题点来看,并发需要处理线程间通信或者协调,并行不需通信或者协调,各自执行各自的,不相关。所以再从执行的时间点来看,并发会出现同一时刻,只有一个线程执行的情况。而并行,多个线程同时执行。
参考:
-《深入理解计算机系统》1.9.2
- 《深入理解并行编程》
- Concurrency vs parallelism
- concurrency-is-not-parallelism