并行 和 并发的区别
如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。
如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。
并发系统与并行系统这两个定义之间的关键差异在于“存在”这个词。
在并发程序中可以同时拥有两个或者多个线程。
这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。
这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态。
如果程序能够并行执行,那么就一定是运行在多核处理器上。
此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。我相信你已经能够得出结论——“并行”概念是“并发”概念的一个子集。
也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。
因此,凡是在求解单个问题时涉及多个执行流程的编程模式或者执行行为,都属于并发编程的范畴。摘自:《并发的艺术》 — 〔美〕布雷谢斯在豆瓣阅读书店查看:https://read.douban.com/ebook/1
并行是两个队列 同时 使用两台咖啡机
并发是两个队列 交替 使用一台咖啡机
并发和并行都可以是很多个线程,就看这些线程难能不能同时被(多个)CPU执行,如果可以就说明是并行,而并发是多个线程被(一个)CPU轮流切换着执行。
摘选自 知乎评论https://www.zhihu.com/question/33515481/answer/105348019
并发(Concurrent):指两个或多个事件在同一时间间隔内发生,即交替做不同事的能力,多线程是并发的一种形式。例如垃圾回收时,用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。
并行(Parallel):指两个或者多个事件在同一时刻发生,即同时做不同事的能力。例如垃圾回收时,多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
串行
多个任务,执行时一个执行完再执行另一个。
比喻:吃完饭再看视频。
并发
多个线程在单个核心运行,同一时间一个线程运行,系统不停切换线程,看起来像同时运行,实际上是线程不停切换。
比喻: 一会跑去厨房吃饭,一会跑去客厅看视频。
并行
每个线程分配给独立的核心,线程同时运行。
比喻:一边吃饭一边看视频。
并行 和 并发的区别相关推荐
- 并行与并发的区别,一瞬间就能理解并记住
并行 同一时刻可以处理多个任务 两个并行执行的任务如下图 并发 同一时刻只能处理一个任务,但一个时间段内可以对多个任务交替处理 两个并发执行的任务如下图 打个比喻 两个人在喂两个孩子吃饭,这叫并行,因 ...
- 进程,线程和协程 并行与并发
一.进程 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大 ...
- 如何区分单核与多核cpu及理解并行与并发
一.单核cpu和多核cpu的区分: 1.单核cpu: 实际上是一种假的多线程,因为在同一时间单元内 ,只能执行一个线程任务,只不过在非常短时间内迅速切换执行不同线程,让人误认为是在同时执行多个线程 2 ...
- 9.程序的并行与并发
程序的并行与并发 计算机资源充足时,如何通过并行设计提高效率 并行与并发的区别: 并发:宏观上,多个任务同时执行 并行:同一时刻发生 并发:一个CPU核心交替运行多个程序 并行:多个C ...
- meo学习笔记3:并行与并发,线程与进程的区别
并发与并行,线程与进程到底有啥区别呀?? 1.前言 最近有为了工作简单看一下操作系统的相关基础问题,看到并发和并行以及线程和进程,感觉可以记录区分一下,以下内容来自网上的文章和我自己的一些理解: 2. ...
- 《Haskell并行与并发编程》——第2章,第2.1节惰性求值和弱首范式
本节书摘来自异步社区<Haskell并行与并发编程>一书中的第2章,第2.1节惰性求值和弱首范式,作者[英]Simon Marlow,更多章节内容可以访问云栖社区"异步社区&qu ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...
- JVM学习笔记之-垃圾回收相关概念 System.gc()的理解 内存溢出与内存泄漏 STW 垃圾回收的并行与并发 安全点与安全区域 再谈引用:强引用 软引用 弱引用 虚引用 终结器引用
System.gc()的理解 在默认情况下,通过System.gc()或者Runtime. getRuntime ( ).gc ()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试 ...
- 同步与异步、并行与并发、阻塞与挂起
同步与异步.并发与并行.阻塞与挂起 同步与异步 并行与并发 阻塞与挂起 同步与异步 同步(synchronous)是指多个有相互之间一定联系的并发执行的进程,通过一定的机制,使之有序执行,从而使其 ...
最新文章
- 公司考勤模块集成百度地图SDK
- 初识tmux---编译安装tmux
- write/read/send/receive函数比较
- Opportunity text creation tool
- 没有还款日期的借条会永久有效吗?
- flask小demo-数据查询
- 关于c语言字符串函数和一些内存函数的的简介
- Solution 7: 判断两链表是否相交
- 去哪儿对垒携程 在线旅游静悄悄的革命
- usb大容量存储设备驱动程序_20年历史了!为什么USB接口还存在?网友:原来如此...
- 泡泡玛特上市首日涨79.22%报69港元 总市值953亿港元
- linux 中文编码环境,linux中文编码问题总结
- iOS:tintColor详解
- TensorFlow实践四步法
- java7 diamond_java7新特性之Diamond syntax
- java关联vss 80020009,80020009: Invalid password[src=SourceSafe,guid=null]
- android 文件管理器 apk,Android6.0自带文件管理器无法打开apk文件
- 香格里拉是如何策划成功的?
- zabbix4.4 启动失败分析
- R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型