Skip to content

Commit 5a58e81

Browse files
committed
update What is concurrency.md
1 parent 3b41ad5 commit 5a58e81

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

zh/chapter1-Introduction/1.1 What is concurrency.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,23 @@
44

55
不过在现实世界中,我们并不会严格定义什么是并发。而在计算机程序世界中,为了编写高性能的代码,我们应该理解什么是并发,并发的基本特性是什么,哪些问题可以使用并发编程来(高效地)解决,哪些情况下又应该尽量避免使用并发编程,我们在使用并发编程时需要注意一些什么问题,本章的将会给大家介绍并发的基本概念,带领大家学习并发编程的基本技巧。
66

7+
8+
## 1.2 并发与并行的联系和区别 ##
9+
710
与并发相近的另一个概念是并行(Parallel)。和并发所描述的情况一样,并行也是指两个或多个任务被同时执行。但是严格来讲,并发和并行的概念并是不等同的,两者存在很大的差别。下面我们来看看计算机科学家们是怎么区分并发和并行的。
811

912
Erlang 是一种通用的并行程序设计语言,在并行、分布式和容错等方面表现优异。下面是 Erlang 官方的介绍:
1013

1114
> Erlang is a programming language used to build massively scalable soft real-time systems with requirements on high availability. Erlang's runtime system has built-in support for concurrency, distribution and fault tolerance.
1215
13-
Erlang 的发明者 Joe Armstrong 在他的一篇博文([原文链接](http://joearms.github.io/2013/04/05/concurrent-and-parallel-programming.html))中提到如何向一个 5 岁的小孩去介绍并发和并行的区别,并给出了下面一幅图:
16+
Erlang 的发明者 Joe Armstrong 在他的一篇博文([原文链接](http://joearms.github.io/2013/04/05/concurrent-and-parallel-programming.html))中提到如何向一个 5 岁的小孩去介绍并发和并行的区别,并给出了下面一幅图(下图是自己重绘的,[原图连接](http://joearms.github.io/2013/04/05/concurrent-and-parallel-programming.html)):
17+
18+
![并发与并行的区别](https://raw.github.com/forhappy/A-Detailed-Cplusplus-Concurrency-Tutorial/master/images/chapter1/concurrent-vs-parallel.png)
19+
20+
直观来讲,并发是两个等待队列中的人同时去竞争一台咖啡机(当然,人是有理性懂礼貌的动物(也不排除某些很霸道的人插队的可能),两队列中的排队者也可能约定交替使用咖啡机,也可能是大家同时竞争咖啡机,谁先竞争到咖啡机谁使用,不过后一种的方法可能引发冲突,因为两个队列里面排在队列首位的人可能同时使用咖啡机),每个等待者在使用咖啡机之前不仅需要知道排在他前面那个人是否已经使用完了咖啡机,还需知道另一个队列中排在首位的人是否也正准备使用咖啡机;而并行是每个队列拥有自己的咖啡机,两个队列之间并没有竞争的关系,队列中的某个排队者只需等待队列前面的人使用完咖啡机,然后再轮到自己使用咖啡机。
21+
22+
因此,并发意味着多个执行实体(比方说上面例子中的人)可能需要竞争资源(咖啡机),因此就不可避免带来竞争和同步的问题;而并行则是不同的执行实体拥有各自的资源,相互之间可能互不干扰。
1423

15-
![并发与并行的区别](https://github.com/forhappy/A-Detailed-Cplusplus-Concurrency-Tutorial/blob/master/images/chapter1/concurrent-vs-parallel.png)
1624

17-
直观来讲,并发意味着多个执行实体可能需要竞争资源,因此就不可避免带来竞争和同步的问题;而并行则是不同的执行实体拥有各自的资源,相互之间可能互不干扰。
1825

1926

0 commit comments

Comments
 (0)