### 并发与并行
并发(Concurrently)和并行(Parallel)是两个不同的概念。借用Go创始人Rob Pike的说法,并发不是并行,并发更好。并发是一共要处理(deal with)很多事情,并行是一次可以做(do)多少事情。
举个简单的例子,华罗庚泡茶,必须有烧水、洗杯子、拿茶叶等步骤。现在我们想尽快做完这件事,也就是“一共要处理很多事情”,有很多方法可以实现并发,例如请多个人同时做,这就是并行。并行是实现并发的一种方式,但不是唯一的方式。我们一个人也可以实现并发,例如先烧水、然后不用等水烧开就去洗杯子,所以通过调整程序运行方式也可以实现并发。
### 大神讲解
如果还不理解,建议看Rob Pike题为Concurrency is not Parallelism的[演讲PPT](http://concur.rspace.googlecode.com/hg/talk/concur.html)和[演讲视频](http://blog.golang.org/concurrency-is-not-parallelism)。
我把演讲的PPT截图贴出来方便大家理解。
![](https://oss.showapi.com/doc/2056/14/2fc04e06-0680-43e9-b2cf-57b419c6cfd0.png)
![](https://oss.showapi.com/doc/2056/14/434caef9-6be0-4e18-b00b-090df3581164.png)
![](https://oss.showapi.com/doc/2056/14/6e940701-fada-4ccb-a304-c449d92e7b75.png)
![](https://oss.showapi.com/doc/2056/14/0c4e0b93-5730-48f9-afe0-8857bd74577d.png)
![](https://oss.showapi.com/doc/2056/14/5b12ecb2-b36f-4946-8933-5c48c48d992f.png)
![](https://oss.showapi.com/doc/2056/14/35714837-db6b-428d-a5fe-be00bf7abd2b.png)
![](https://oss.showapi.com/doc/2056/14/0b50d913-ffae-4406-94cd-a178da1ac234.png)
![](https://oss.showapi.com/doc/2056/14/69105495-7cab-4215-a6e3-dbb215a4103a.png)
![](https://oss.showapi.com/doc/2056/14/28c5d931-18cb-423c-837a-65b2c57fc3d6.png)
![](https://oss.showapi.com/doc/2056/14/1592eb0c-e582-40c4-ac52-e5fa14c610a3.png)
![](https://oss.showapi.com/doc/2056/14/5bbd56af-9a28-431d-b64a-b8613a613c9b.png)
![](https://oss.showapi.com/doc/2056/14/6c7c1cdb-48e2-458b-9a39-80784b4a976b.png)
![](https://oss.showapi.com/doc/2056/14/a5056f46-8356-40b0-a159-df3422a007b4.png)
### 总结
总结一下,并行是实现并发的一种方式,在多核CPU的时代,并行是我们设计高效程序所要考虑的,那么进程是不是越多越好呢?