Skip to content

Commit 45cbac7

Browse files
committed
Merge pull request Voidly#1 from Voidly/master
test
2 parents a15a031 + 9ad8e04 commit 45cbac7

22 files changed

+353
-4
lines changed

README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,40 @@
11
# Parallel-Programming-with-Python
22
Parallel Programming with Python,a book about parallel in python,We will translate it into Chinese
3+
4+
##[第一章:并行、并发分布式编程对比分析](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/%E5%B9%B6%E8%A1%8C%E3%80%81%E5%B9%B6%E5%8F%91%E4%B8%8E%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%96%E7%A8%8B%E7%9A%84%E5%AF%B9%E6%AF%94%E5%88%86%E6%9E%90.md)
5+
6+
* ####[为什么使用并行编程](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%E5%B9%B6%E8%A1%8C%E7%BC%96%E7%A8%8B.md)
7+
8+
* ####[探索并行化的几种模式](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/%E6%8E%A2%E7%B4%A2%E5%B9%B6%E8%A1%8C%E5%8C%96%E7%9A%84%E5%87%A0%E7%A7%8D%E6%A8%A1%E5%BC%8F.md)
9+
10+
* ####[并行编程间的通信](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/%E5%9C%A8%E5%B9%B6%E8%A1%8C%E7%BC%96%E7%A8%8B%E9%80%9A%E4%BF%A1.md)
11+
12+
* ####[识别并行编程的问题](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/%E8%AF%86%E5%88%AB%E5%B9%B6%E8%A1%8C%E7%BC%96%E7%A8%8B%E7%9A%84%E9%97%AE%E9%A2%98.md)
13+
14+
* ####[发现Python并行编程的工具](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/%E5%8F%91%E7%8E%B0Python%E5%B9%B6%E8%A1%8C%E7%BC%96%E7%A8%8B%E7%9A%84%E5%B7%A5%E5%85%B7.md)
15+
16+
* ####[小心Python GIL](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/%E5%B0%8F%E5%BF%83Python%20GIL.md)
17+
18+
* ####[总结](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%80%E7%AB%A0/%E6%80%BB%E7%BB%93.md)
19+
20+
21+
##[第二章:设计并行算法](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/%E8%AE%BE%E8%AE%A1%E5%B9%B6%E8%A1%8C%E7%AE%97%E6%B3%95.md)
22+
23+
* ####[分治技术](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/%E5%88%86%E6%B2%BB%E6%8A%80%E6%9C%AF.md)
24+
25+
* ####[使用数据分解](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/%E4%BD%BF%E7%94%A8%E6%95%B0%E6%8D%AE%E5%88%86%E8%A7%A3.md)
26+
27+
* ####[用管道分解任务](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/%E7%94%A8%E7%AE%A1%E9%81%93%E5%88%86%E8%A7%A3%E4%BB%BB%E5%8A%A1.md)
28+
29+
* ####[处理和映射](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/%E5%A4%84%E7%90%86%E5%92%8C%E6%98%A0%E5%B0%84.md)
30+
31+
* ####[总结](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%BA%8C%E7%AB%A0/%E6%80%BB%E7%BB%93.md)
32+
33+
34+
##[第三章:识别一个可并行的问题](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/%E8%AF%86%E5%88%AB%E4%B8%80%E4%B8%AA%E5%8F%AF%E5%B9%B6%E8%A1%8C%E7%9A%84%E9%97%AE%E9%A2%98.md)
35+
36+
* ####[从多个输入中得到斐波那契最大的值](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/%E4%BB%8E%E5%A4%9A%E4%B8%AA%E8%BE%93%E5%85%A5%E4%B8%AD%E5%BE%97%E5%88%B0%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%9C%80%E5%A4%A7%E7%9A%84%E5%80%BC.md)
37+
38+
* ####[爬取网页](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/%E7%88%AC%E5%8F%96%E7%BD%91%E9%A1%B5.md)
39+
40+
* ####[总结](https://github.com/Voidly/Parallel-Programming-with-Python/blob/master/%E7%AC%AC%E4%B8%89%E7%AB%A0/%E6%80%BB%E7%BB%93.md)

第一章/ReadMe.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,20 @@
1-
##Contextualizing Parallel, Concurrent, and Distributed Programming
1+
##Contextualizing Parallel, Concurrent, and Distributed Programming
2+
3+
- 并行、并发分布式编程对比分析
4+
- 为什么使用并行编程
5+
- 探索并行化的几种方式
6+
- 并行编程间的通信
7+
* 理解状态共享
8+
* 理解消息传递
9+
- 识别并行编程的问题
10+
* 死锁
11+
* 饥饿
12+
* 竞态条件
13+
- 发现Python并行编程的工具
14+
- Python线程模块
15+
- Python多进程模块
16+
- Python并行模块
17+
- Celery-一个分布式任务队列
18+
- 小心PythonGIL
19+
- 总结
20+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
##为什么使用并行编程
2+
3+
自从计算系统进化以来,它们已经开始提供一个能使我们以并行的方式运行指定软件的独立的某部分的机制,从而提升响应速度以及一般的性能。此外,我们可以很容易的验证配备有多个处理器以及多核的机器。那么,为什么不利用这个架构呢?
4+
5+
在系统开发的所有情况下,从智能手机、平板电脑到研究中心的重型计算,并行编程都是现实的。并行编程的一个坚实的基础将允许开发人员优化一个应用的性能。这会增强用户体验移机计算资源的消费,从而减少完成复杂任务的处理时间。
6+
7+
举一个并行性的栗子,让我们想象一个场景,在这个场景中,有其他的任务,在其它任务中,有一个应用是从数据库中检索一些信息,而这个数据库规模又很大。再考虑一下,这个应用还需要顺序执行,在这个应用中,这些任务必须以一定的逻辑顺序,一个接一个的执行。当用户请求数据时,在返回的数据没有结束之前,其它系统将一直被阻塞。然而,利用并行编程,我们将会创造一个新的worker来在数据库红查询信息,而不会阻塞这个应用的其它功能,从而提高它的使用。
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
##发现Python并行编程的工具
2+
3+
由Guido Van Rossum创造的语言,是一种多泛型的,多用途的语言。由于它非常简单且易于维护,被世界各处广泛接受。它也被称为含有电池的语言。它有广泛的模块使其用起来更流畅。在并行编程中,Python有简化实现的内置和外部模块。这是基于Python3.X的。
4+
5+
###Python线程模块
6+
7+
Python线程模块提供了一个抽象层次的模块_thread,这是一个低层次的模块。当开发一个基于线程的并行系统的艰巨任务时,它为程序员提供了一些函数来帮助程序员的开发。线程模块的官方文档可以在<http://docs.python.org/3/library/
8+
threading.html?highlight=threading#module-threadin>找到。
9+
10+
###Python多进程模块
11+
12+
多进程模块旨在为基于进程的并行的使用提供一个简单的API。这个模块与线程模块类似,它简化了进程间的交替而没有什么难度。在Python社区中,基于进程的方法很流行,因为它是在回答出现在Python中CPU-Bound threads和GIL的使用的问题时的一个解决方案。多进程模块的官方文档可以在<http://docs.python.org/3/library/multiprocessing.html?highlight=multi
13+
processing#multiprocessing>找到。
14+
15+
###并行Python模块
16+
17+
并行Python模块是外部提供的,它提供了丰富的API,这些API利用进程的方法创建并行和分布式系统。这个模块是轻量级并且易安装的,它与其他的Python程序一起集成的。并行模块可以在<http://parallelpython.com>找到。在那么多特性中,我们着重强调以下几点:
18+
19+
* 最优配置的自动检测
20+
* 运行时可以改变多个工作进程
21+
* 动态的负载均衡
22+
* 容错性
23+
* 自发现计算资源
24+
25+
###Celery-分布式任务队列
26+
27+
Celery是一个用于创建分布式系统的极其优秀的模块,并且拥有很好的文档。它在并发形式上使用了至少三种不同类型的方法来执行任务:multiprocessing, Eventlet,和 Gevent。这项工作将会集中精力在多进程的方法的使用上。而且,一个与另一个的连接就是配置问题,这被留下来作为一个研究,以便读者能够建立一个与他/她的实验的一个比较。
28+
29+
Celery模块可以在官方的项目页面<http://celeryproject.org>得到。
30+
31+

第一章/在并行编程通信.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
##在并行编程通信
2+
3+
在并行编程中,workers被送来执行任务,而执行任务常常需要建立通信,以便可以合作解决一个问题。
4+
在大多数情况下,通信以一种可以在workers之间进行数据交换的方式被建立。当说到并行编程,有两种通信方式广为人知:共享状态和消息传递。在下面的章节中,将对这两种方式进行简要描述。
5+
6+
###理解共享状态
7+
8+
在workers中最有名的一种通信方式就是共享状态。分享状态似乎是一个简单的使用,但是这会有许多的陷阱,因为进程中的一个进程执行了无效的操作来分享资源会影响其它的进程,从而导致一个不好的结果。这也是使在多台计算机之间进行分布式的程序成为不可能的显而易见的原因。
9+
10+
为了说明这一点,我们将使用一个真实的案例。假设你是一个具体的银行的一个客户,而这个银行只用一个收银员。当你去银行,你必须要排队等到轮到你的时候。当你在队列中时,你注意到收银员一次只能为一个顾客服务,而收银员不可能同时为两个顾客提供服务而不出错。电脑运算提供数据访问控制的方式,还有一些技术,比如mutex(互斥?)。
11+
12+
Mutex可以理解为一种特殊的过程变量,表示了访问数据的可靠性等级。也就是说,在真实世界的栗子中,顾客有一个数字,在特殊的时刻,这个数字将会被激活,然后收银员对于这个顾客来说将是唯一可用的。在进程结束时,顾客将会被释放,然后收银员开始为下一个顾客服务,以此类推。
13+
14+
> 在某些情况下,当程序正在运行时,在一个变量中数据会有一个常数值,数据仅仅以只读的目的被分享。所以访问控制不是必须的,因为永远不会出现完整性问题。
15+
16+
###理解信息传递
17+
18+
运用消息传递是为了避免来自共享状态带来的数据访问控制以及同步的问题。消息传递包含一种在运行的进程中进行消息交换的机制。每当我们用分布式架构开发程序的时候,就能见到消息传递的使用,在网络中,消息交换被放在一个重要的位置。语言中譬如说Erlang,在它的并行体系结构中,就是使用这个模型来实现通信。一旦在每个数据交换中出现数据复制,就并发访问来说出现问题是不可能的。尽管内存使用看起来比共享内存状态要高,但是这个模型还是有一些优势的。优势如下:
19+
20+
* 缺乏数据的一致性访问
21+
* 数据可在本地交换(不同的进程)或者在分布式环境中
22+
* 这使得可扩展性问题以及不同系统间的互用性的可能性不太可能发生。
23+
* 一般来说,据程序员来说易于维护。

第一章/小心Python GIL.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
##小心Python GIL
2+
3+
GIL是一种用于实现标准Python的一种机制,也被称为CPython,是为了避免不同的线程同时执行字节码。在这门语言的使用者中,GIL存在的原因被激烈的讨论着。GIL被选来用于保护被CPython解释器使用的内存储器,而没有实现为线程的并发访问的同步机制。在任何情况下,当我们决定使用线程时,GIL将会导致一个问题,这些往往是CPU受限。比如说,I/O Threads超出了GIL的范围。也许机制将会对Python的演变带来更多的好处而不是坏处。显然,我们不能仅仅将效率作为评判一个事情是好是坏的唯一的标准。
4+
5+
在某些支持进程的任务情况下使用消息传递将会在可维护性、可扩展性以及性能上带来更好的关系。即使如此,在某些情况下真的会需要线程,而这将会对GIL进行减弱。在这些情况下,所能做的就是写一些代码片段作为C语言的扩展,并且把它们嵌入到Python程序中。因此也是有替代品的,这应由开发人员分析真正的需求。那么问题来了,GIL一般来说是一个恶棍吗?重要的是要记住,PyPy团队正致力于将GIL从Python中移除的STM的实现。想了解有关此项目的更多细节,请访问<http://pypy.org/tmdonate.html>.
6+

第一章/并行、并发与分布式编程的对比分析.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,19 @@
66

77
在80年代末期,出现了Intel80486,它实现了一种管道系统,在实践中,这个系统将执行阶段划分为不同的子阶段。实际上,在一个处理器周期中,我们可能有不同的指令在一个子阶段同时被执行。
88

9-
所有的在前一节所提到的进步带来一些性能上的提升,但是这些仍然不够,我们所面对的微妙的问题,而这,被称为摩尔定律(<http://www.mooreslaw.org/>)。
9+
所有的在前一节所提到的进步带来一些性能上的提升,但是这些仍然不够,我们所面对的微妙的问题,而这,被称为摩尔定律(<http://www.mooreslaw.org/>)。
10+
11+
追求高税收的时钟最终会和物理限制相碰撞;处理器将消耗更高的能量,从而产生更多的热。此外,还有一个重大的问题,便携式电脑的市场在90年代正在加速扩张。所以,有一种能够使这些设备的电源能够持续长时间的远离插座的处理器是极其重要的。几个来自不同的制造商的技术和家庭的处理器诞生了。作为服务器和大型主机,英特尔应该强调他家族产品的内核是即使只有一个物理芯片,也允许操作系统模拟出存在不止一个的处理器。
12+
13+
在内核家族,处理器有重大的内部变化和特色组件被称为内核,它有自己的ALU和L2、L3缓存,以及其它的用于执行指令的元素。这些内核也被称为逻辑处理器,让我们可以同时并行的执行一个程序的不同的部分,甚至同时执行不同的程序。这个时代的内核是低能耗的使用与功率处理都比前一代处理器更优。作为并行工作的内核,模拟独立的处理器,我们可以有多核芯片和一个比较次的时钟,从而根据任务来获得与单核芯片却有更高的时钟相比的更高的性能。
14+
15+
当然,如此多的进化改变了我们软件设计的方法。现如今,我们必须考虑并行的设计系统来使我们更合理的使用资源,而不是浪费它们,从而为用户提供更好地体验,并且不仅仅在个人电脑上节省资源,而且要在处理中心节省资源。尤其是现在并行编程已融入开发人员的日常生活,并且很明显不会消失。
16+
17+
本章节包含以下几个主题:
18+
19+
* 为什么使用并行编程?
20+
* 介绍并行化的常见形式
21+
* 在并行编程中通信
22+
* 识别并行编程的问题
23+
* 发现Python的并行编程工具
24+
* 小心Python的Global Interpreter Lock(GIL)

第一章/总结.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
##总结
2+
3+
在这一章节,我们学了一些并行编程的概念,并学习了一些模型的优点以及缺点。在谈到并行性的时候对于一些问题或者潜在问题进行了一些简短的解释。我们也对Python的一些内置和外部的模块进行了简短的介绍,这让开发人员在建立并行系统时会更加轻松。
4+
5+
在下一章节,我们会学习一些设计并行算法的技术。
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
##探索并行化的几种模式
2+
3+
当我们试图定义并行系统的主要模式的时候,我们有一定的困惑。在并发并行系统中找到语录很常见,就像它们意味着同一件事。然而它们有着轻微的差异。
4+
5+
在并发程序中,我们有这么一个场景,在这个场景中,一个程序分派几个workers,这些workers争着使用CPU来执行任务。在纷争发生的阶段将被CPU调度器所控制,CPU调度器的功能是决定在一个特殊的时刻,哪个worker更适合使用资源。在大多数情况下,CPU调度器执行清理过程的任务太快以至于我们会有伪并行的印象。因此,并发编程是来自并行编程的一种抽象。
6+
7+
> 并发系统争夺同一个CPU来执行任务。
8+
9+
下图显示了一个并发程序方案:
10+
11+
![](https://github.com/Voidly/Img/blob/master/Parallel%20Programming%20with%20Python/Chapter%201/Concurrent%20programming%20scheme.png?raw=true)
12+
13+
并行编程可以被定义为一种方法,在那个方法中,程序数据创造workers在多核环境中同时的执行指定的任务,在那些任务中它们不需要并发的接触CPU。
14+
15+
> 并行系统同时的运行任务。
16+
17+
下面的图显示了并行系统的概念:
18+
19+
![](https://github.com/Voidly/Img/blob/master/Parallel%20Programming%20with%20Python/Chapter%201/Parallel%20programming%20scheme.png?raw=true)
20+
21+
分布式编程旨在在计算机器(节点)之间通过消息交换数据来分享进程,这是物理分离。
22+
23+
分布式编程变得越来越受欢迎的原因有很多,下面是被探讨的受欢迎的原因:
24+
25+
* **容错性**:由于系统是去中心化的,我们可以分发执行同一个网络的不同机器,从而执行指定机器的个人维护而不影响整个系统的功能。
26+
* **横向扩展**:通常我们可以在分布式系统中增加处理的性能。我们可以在不需要终止正在执行的应用的情况下连接新的设备。
27+
* **云计算**:随着硬件成本的降低,我们需要这种业务类型的增长,在这种增长中,我们可以获得巨大的机器集群,这些集群对用户来说以一种合作的方式运行并且以一种透明的方式运行程序。
28+
29+
> 分布式系统在物理隔离的节点上运行任务。
30+
31+
下图显示了一个分布式系统的方案:
32+
33+
![](https://github.com/Voidly/Img/blob/master/Parallel%20Programming%20with%20Python/Chapter%201/Distributed%20programming%20scheme.png?raw=true)

0 commit comments

Comments
 (0)