文档章节

Parallelism Vs Concurrency

52iSilence7
 52iSilence7
发布于 01/06 18:13
字数 818
阅读 5
收藏 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

粉丝 6
博文 107
码字总数 89131
作品 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
101
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
255
2
知其然亦知其所以然-NSOperation并发编程

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

金小俊
2015/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos 查看删除旧内核

1、查看系统中安装的内核 $ yum list installed | grep kernel 2、删除系统中旧内核 $ yum install yum-utils$ package-cleanup --oldkernels --count=2...

编程老陆
19分钟前
7
0
ES6

ES6:不改变原理的基础上,让API变得更简单 一、let:代替var用于声明变量 1、var的缺点: (1)声明提前 (2)没有块级作用域 2、let的优点: (1)组织了申明提前 (2)让let所在的块({}),...

wytao1995
今天
3
0
kubernetes 环境搭建 —— minikube

创建集群 minikube start 搭建好 k8s 集群后,可以查看集群的状态以及部署应用。主要用到的是 k8s 的 api,这通常需借助于 kutectl 命令行工具 基本操作 kubectl versionkubectl cluster-i...

lemos
今天
9
0
关于js混淆与反混淆还原操作

使用js的混淆加密,其目的是为了保护我们的前端代码逻辑,对应一些搞技术吃饭的公司来说,为了防止被竞争对手抓取或使用自己的代码,就会考虑如何加密,或者混淆js来达到代码保护。 1、为什么...

开源oschina
今天
11
0
用盛金公式解三次方程(ansi c版)

/* cc cubic.c -lm gcc cubic.c -lm Shengjin's Formulas Univariate cubic equation aX ^ 3 + bX ^ 2 + cX + d = 0, (a, b, c, d < R, and a!= 0). Multiple root disc......

wangxuwei
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部