文档章节

Parallelism Vs Concurrency

52iSilence7
 52iSilence7
发布于 01/06 18:13
字数 818
阅读 7
收藏 0

这是两个英文解释边界都很模糊的单词,翻译到中文里就更让人满头雾水了。网友对这两个词的解释也是各执一词,网友在Stack Overflow 上也问过这个问题What is the difference between concurrency and parallelism?, 排名最高的解释与我们平常接收到的一致:Parallelism(并行) 表示多个任务在同一时间同时运行,并发表示多个任务可以在不同的时间片上执行,但某一个时刻可以只有一个任务运行。在我看来这个定义的给人的感觉区别就在于CPU 是单核还是多核,没有什么价值。二楼的网友给出了parallelism 和 concurrency 之间不同的关键特征:Parallelism: Independentability, Concurrency: Interruptability, 并举了四种情况的例子。

关键是这两个单词对我们的开发有什么指导意义呢?从字面含义上来看完全没有头绪,我们设计程序时如果牵扯到多线程编程该以哪个为指导呢?或者两者都需要考虑?(并发编程字面上含有并发,但为何如此?并行就不需要考虑了么?)

Haskell 在wiki里对这两者有过一篇文章, 里面给出了解释:The term Parallelism refers to techniques to make programs faster by performing several computations at the same time. The term Concurrency refers to techniques that make programs more usable. 并行是为了提升计算速度的技术,而并发是为了使程序更合用。If you run distributed-net computations in the background while working with interactive applications in the foreground, that is concurrency. On the other hand, dividing a task into packets that can be computed via distributed-net clients is parallelism.. Go 的发明者 Rob Pike 曾对这个做过一个 presentation Concurrency is not parallelism, 他将 concurrency 当做指导我们编程的准则,也就是他说的Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once. 我们需要将任务一步步分解开来,在脑海中描绘完成任务所需的步骤,每一步可以是独立的也可以依赖其他的步骤。当我们将任务步骤完成后,这个整体可以拷贝复制很多份并行执行。

在单机编程中,线程是最小的执行单位,在这个维度上我们只考虑并发对我们的影响,因为执行是不太需要我们关心的,OS 可以自己做好调度。在分布式系统中,单台机器变成了最小的单位,我们不仅要考虑并发,还需要考虑并行。一堆任务如何分解成一系列步骤,步骤之间可能是相互依赖的,这是并发维度;这一堆任务分成不同的组,任务之间是可以并行执行的,还需要考虑调度问题。因此并发和并行对于思维的要求是不一样的,这也是我们在面对问题时的两种解决思路。

© 著作权归作者所有

52iSilence7

52iSilence7

粉丝 7
博文 109
码字总数 92129
作品 0
海淀
高级程序员
私信 提问
DICOM:DICOM开源库多线程分析之“ThreadPoolQueue in fo-dicom”

版权声明:本文为zssure原创文章,转载请注明出处,未经允许不得转载。 https://blog.csdn.net/zssureqh/article/details/50637387 背景: 上篇博文介绍了dcm4chee中使用的Leader/Follower线...

zssure
2016/02/05
0
0
Java并发库(Java Concurrency)

原文地址 译文地址 译者:张坤等 Java并发性和多线程介绍(Java Concurrency / Multithreading Tutorial) 多线程的优点(Multithreading Benefits) 多线程的代价(Multithreading Costs) ...

暗之幻影
2016/12/17
103
0
Concurrent and Parallel Programming

What’s the difference between concurrency and parallelism? Explain it to a five year old. Concurrent = Two queues and one coffee machine. Parallel = Two queues and two coffee m......

天天顺利
2015/10/27
53
0
关于golang的协程并行的控制与示例程序

首先明确一个观点并行 并发区别: 并行是指程序的运行状态,要有两个线程正在执行才能算是Parallelism;并发指程序的逻辑结构,Concurrency则只要有两个以上线程还在执行过程中即可。简单地说...

r00txx
2016/08/19
266
2
知其然亦知其所以然-NSOperation并发编程

对于iOS的并发编程, 用的最普遍的就是GCD了, GCD结合Block可以so easy的实现多线程并发编程. 但如果你看一些诸如AFNetworking, SDWebImage的源码, 你会发现它们使用的都是NSOperation, 纳尼?...

金小俊
2015/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
17分钟前
2
0
前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部