并发 concurrency 与并行 parallel的区别

最近在读《real world haskell》里关于并行的一章时,看到作者首先对并发(Concurrency)和并行(Parallelism)的区别进行了定义和解释。以前我对这个问题也是一知半解,如果有人问题这个问题,恐怕我只能挠头说不清楚。而在这本书里,作者的解释是(简单翻译):

一个并发程序是指能同时执行通常不相关的各种任务。以一个游戏服务器为例子:它通常是有各种组件组成,每种组件都跟外部世界进行着复杂的信息交互。一个组件有可能要处理多个用户聊聊;另外一些可能要处理用户的输入,并把最新状态反馈给用户;其它的用来进行物理计算。这些都是并发处理。

并发程序并不需要多核处理器。

相比之下,并行程序是用来解决一个单一任务的。以一个试图预估某支股票价格在下一分钟波动情况的金融组件为例,如果想最快速度的知道标普500中哪知股票应该卖出还是买进,你不能一个一个的计算,而是将这些所有的股票同时计算。这是并行。

其实也不是很好懂,我自己琢磨了一下,大概是这个道理:并发就是一心二用(多用),比如你一边听老师讲课,一边低头看课桌下韩寒的小说。这两件事你在同时做,而且这两件事并不一定需要相关。而并行就是兵分几路干同一个事情。比如别人看小说只能一行一行的看,而你能一目十行,这就是并行。:) 。

关于并发和并行的区别,Go语言有一个非常好的教材,叫做“并发不是并行”,它以Go语言为例,图文并茂的为我们讲解了并发和并行之间的联系和区别。

 

并发不是并行

 

文中使用地鼠烧书为例,通过设计出不同的并发装书、运书、烧书的流程来比较并发和并行技术的组合运用。原文是英文的,这里是外刊IT评论网翻译的中文版并发不是并行,供大家欣赏。(提示:这个教材使用HTML5技术做成了幻灯片的形式,所以你需要使用支持HTML5的现代浏览器浏览。)

并发不是并行

 

并发concurrency是一心二用,concurrency以时间片为单位串行执行多个任务,是看起来是同步而并不实际上同步,所以concurrency并不需要多核。 并行parallel是多心一用,多个模块同时呗用来解决一个问题,所以需要多核。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值