您的位置:首页 > 其它

并行与并发的理解

2012-11-05 10:49 148 查看
# 并行与并发的理解

**背景**:根据Golang-china里面一帖子的讨论,到网上查资料做的笔记。

>"并行是关于性能的;并发是关于程序设计的。--ROB PIKE"

## 博客参考

- [并发和并行的区别:吃馒头的比喻](http://developer.51cto.com/art/200908/141553.htm)

- 并发(concurrency):一个处理器同时处理多个任务(*逻辑上*的同时发生);
- 并行(parallelism):多个处理器或者是多核的处理器同时处理多个不同的任务(*物理上*的同时发生);

**来个比喻**:并发和并行的区别就是一个人同时吃三个馒头和三个人同时吃三个馒头。

- [请说明并行与并发的本质区别](http://zhidao.baidu.com/question/4923389)

这应该是*操作系统*中的名词吧? 

- “并发”在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程都在执行,这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。
- “并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。

**从以上本质不难看出,“并发”执行,在多个进程存在资源冲突时,并没有从根本提高执行效率。**

- [并发(Concurrent)与并行(Parallel)](http://www.cnblogs.com/NickyYe/archive/2008/12/01/1344802.html)

- [Golang-china邮件列表](https://groups.google.com/forum/?fromgroups=#!topic/golang-china/D4jtGoXyWc8)

> minux: 并发更重要的是一种思考、解决问题的方式,能不能并行其实不影响它的

本质。只不过如果你的程序是用这种方式写成的,会比普通的方式更容易

得到并行的好处(因为并发的程序不再是严格串行执行了,你必须正确处

理同步的问题)。

并发是划分问题的一种方式,跟能不能真正并行地执行这些任务无关。一个

简单的例子就是质数筛。另外一个是判断两个二叉树中序遍历是否对应相同

的序列。这两个问题用普通串行的编程方式是不好简洁地表达的,但是用goroutine

+channel就可以做得简单明了,但是这两个程序都没有或者几乎没有并行性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: