• 如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。

  • 如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。

并发系统与并行系统这两个定义之间的关键差异在于“存在”这个词。
在并发程序中可以同时拥有两个或者多个线程。
这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。
这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态。
如果程序能够并行执行,那么就一定是运行在多核处理器上。
此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。我相信你已经能够得出结论——“并行”概念是“并发”概念的一个子集。
也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。
因此,凡是在求解单个问题时涉及多个执行流程的编程模式或者执行行为,都属于并发编程的范畴。摘自:《并发的艺术》 — 〔美〕布雷谢斯在豆瓣阅读书店查看:https://read.douban.com/ebook/1

  • 并行是两个队列 同时 使用两台咖啡机

  • 并发是两个队列 交替 使用一台咖啡机

并发和并行都可以是很多个线程,就看这些线程难能不能同时被(多个)CPU执行,如果可以就说明是并行,而并发是多个线程被(一个)CPU轮流切换着执行。

摘选自 知乎评论https://www.zhihu.com/question/33515481/answer/105348019

  • 并发(Concurrent):指两个或多个事件在同一时间间隔内发生,即交替做不同事的能力,多线程是并发的一种形式。例如垃圾回收时,用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。

  • 并行(Parallel):指两个或者多个事件在同一时刻发生,即同时做不同事的能力。例如垃圾回收时,多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。

串行

多个任务,执行时一个执行完再执行另一个。
比喻:吃完饭再看视频。

并发

多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。
比喻: 一会跑去厨房吃饭,一会跑去客厅看视频。

并行

每个线程分配给独立的核心,线程同时运行。
比喻:一边吃饭一边看视频。

并行 和 并发的区别相关推荐

  1. 并行与并发的区别,一瞬间就能理解并记住

    并行 同一时刻可以处理多个任务 两个并行执行的任务如下图 并发 同一时刻只能处理一个任务,但一个时间段内可以对多个任务交替处理 两个并发执行的任务如下图 打个比喻 两个人在喂两个孩子吃饭,这叫并行,因 ...

  2. 进程,线程和协程 并行与并发

    一.进程 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大 ...

  3. 如何区分单核与多核cpu及理解并行与并发

    一.单核cpu和多核cpu的区分: 1.单核cpu: 实际上是一种假的多线程,因为在同一时间单元内 ,只能执行一个线程任务,只不过在非常短时间内迅速切换执行不同线程,让人误认为是在同时执行多个线程 2 ...

  4. 9.程序的并行与并发

    程序的并行与并发 计算机资源充足时,如何通过并行设计提高效率 并行与并发的区别: ​ 并发:宏观上,多个任务同时执行 ​ 并行:同一时刻发生 ​ 并发:一个CPU核心交替运行多个程序 ​ 并行:多个C ...

  5. meo学习笔记3:并行与并发,线程与进程的区别

    并发与并行,线程与进程到底有啥区别呀?? 1.前言 最近有为了工作简单看一下操作系统的相关基础问题,看到并发和并行以及线程和进程,感觉可以记录区分一下,以下内容来自网上的文章和我自己的一些理解: 2. ...

  6. 《Haskell并行与并发编程》——第2章,第2.1节惰性求值和弱首范式

    本节书摘来自异步社区<Haskell并行与并发编程>一书中的第2章,第2.1节惰性求值和弱首范式,作者[英]Simon Marlow,更多章节内容可以访问云栖社区"异步社区&qu ...

  7. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  8. JVM学习笔记之-垃圾回收相关概念 System.gc()的理解 内存溢出与内存泄漏 STW 垃圾回收的并行与并发 安全点与安全区域 再谈引用:强引用 软引用 弱引用 虚引用 终结器引用

    System.gc()的理解 在默认情况下,通过System.gc()或者Runtime. getRuntime ( ).gc ()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试 ...

  9. 同步与异步、并行与并发、阻塞与挂起

    同步与异步.并发与并行.阻塞与挂起 同步与异步 并行与并发 阻塞与挂起 同步与异步   同步(synchronous)是指多个有相互之间一定联系的并发执行的进程,通过一定的机制,使之有序执行,从而使其 ...

最新文章

  1. 公司考勤模块集成百度地图SDK
  2. 初识tmux---编译安装tmux
  3. write/read/send/receive函数比较
  4. Opportunity text creation tool
  5. 没有还款日期的借条会永久有效吗?
  6. flask小demo-数据查询
  7. 关于c语言字符串函数和一些内存函数的的简介
  8. Solution 7: 判断两链表是否相交
  9. 去哪儿对垒携程 在线旅游静悄悄的革命
  10. usb大容量存储设备驱动程序_20年历史了!为什么USB接口还存在?网友:原来如此...
  11. 泡泡玛特上市首日涨79.22%报69港元 总市值953亿港元
  12. linux 中文编码环境,linux中文编码问题总结
  13. iOS:tintColor详解
  14. TensorFlow实践四步法
  15. java7 diamond_java7新特性之Diamond syntax
  16. java关联vss 80020009,80020009: Invalid password[src=SourceSafe,guid=null]
  17. android 文件管理器 apk,Android6.0自带文件管理器无法打开apk文件
  18. 香格里拉是如何策划成功的?
  19. zabbix4.4 启动失败分析
  20. R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型

热门文章

  1. python中数据分组计算_python3数据聚合与分组运算(二)
  2. 毫无头绪的自学Python,你可能连门槛都摸不到
  3. java实现上传图片到远程服务器
  4. 在Anaconda中安装pytorch的详细步骤+PyCharm环境配置
  5. sql创建视图时,需要设置默认值字段
  6. Redis 学习笔记(一)
  7. 哈佛人告诉你怎样学习 怎样培养人高贵的气质
  8. 内蒙古今日油价2022-03-05
  9. git Bash代码密匙公匙配置
  10. c语言fmod函数6,C语言fmod()函数:对浮点数取模(求余)