并行和并发有什么区别?

并行和并发

并行和并发最早其实描述的是 Java 并发编程里面的概念。他们强调的是 CPU 处理任务的能力。简单来说:

  • 并发,就是同一个时刻,CPU 能够处理的任务数量,并且对于应用程序来说,不会出现卡顿现象。
  • 并行,就是同一个时刻,允许多个任务同时执行,在多核 CPU 架构中,同时执行的任务数量是由核心数决定的,

比如在 4 核 4 线程的 CPU 中,只能同时执行 4 个线程。这两个概念看起来类似,但其实描述的纬度是不同的,并发描述的是程序处理能力的视角,并行描述的是 CPU 处理任务方式的视角,一个是宏观层面,一个是微观层面。他们两个又是相辅相成的,CPU 并行执行任务的能力,又能提升程序的并发处理性能。所以多核 CPU 的性能要比单核 CPU 好。当然,如果是单核 CPU,也可以通过时间片切换的方式提升并发能力。

区别

Erlang 之父 Joe Armstrong 用了一张图片解释了并行和并发的区别。并发就是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机。

总结

并行和并发是 Java 并发编程里面的概念。并行,是指在多核 CPU 架构下,同一时刻同时可以执行多个线程的能力。在单核 CPU 架构中,同一时刻只能运行一个线程。在 4 核 4 线程的 CPU 架构中,同一时刻可以运行 4 个线程,那这 4 个线程就是并行执行的。并发,是指在同一时刻 CPU 能够处理的任务数量,也可以理解成 CPU 的并发能力。在单核 CPU 架构中,操作系统通过 CPU 时间片机制提升 CPU 的并发能力 ,在多核 CPU 架构中,基于任务的并行执行能力以及 CPU 时间片切换的能力来提升 CPU的并发能力。 所以,总的来说,并发是一个宏观概念,它指的是 CPU 能够承载的压力大小, 并行是一个微观概念,它描述 CPU 同时执行多个任务的能力。

相关推荐
REDcker几秒前
C++ 包管理工具概览
开发语言·c++
卓怡学长1 分钟前
基于 SpringBoot 的生活信息分享平台,从 0 到 1 完整实现(附源码 + 数据库)
java·数据库·spring boot·tomcat·maven
ID_180079054732 分钟前
Python解析小红书(XHS)笔记评论 API,json数据返回参考
java·服务器·数据库
努力努力再努力wz4 分钟前
【C++高阶系列】告别内查找局限:基于磁盘 I/O 视角的 B 树深度剖析与 C++ 泛型实现!(附B树实现源码)
java·linux·开发语言·数据结构·c++·b树·算法
hero.fei6 分钟前
RoaringBitmap在SpringBoot中的使用以及与BitSet对比
java·spring boot·spring
Traving Yu7 分钟前
Spring源码与框架原理
java·后端·spring
王家视频教程图书馆11 分钟前
rust 写gui 程序 最流行的是哪个
开发语言·后端·rust
Lyyaoo.12 分钟前
【JAVA基础面经】线程安全的单例模式
java·安全·单例模式
Wadli14 分钟前
Oncall Agent项目
开发语言
_李小白17 分钟前
【OSG学习笔记】Day 39: NodeCallback(帧回调机制)
java·笔记·学习