第13章 并发
并发(concurrency)和其表现形式之一——并行处理(parallel processing)——是软件工程领域最广泛的话题之一。这本书中的大部分章节也涵盖广阔的领域,几乎所有的章节的主题都很大,足可以写一本单独的书。然而,并发的主题本身就很大,它可能需要几十个篇幅来讲,即使这样我们仍然无法讨论完它所有重要的方面和模型。
这就是为什么我不会试图欺骗你,从一开始的状态,我们几乎不会碰到这个话题的表面。本章的目的是说明为什么在应用程序中需要并发,什么时候使用它,以及在Python中你可以使用的最重要的并发模型。
- 多线程(multithreading)。
- 多进程(multiprocessing)。
- 异步编程(asynchronous programming)。
我们还将讨论一些语言特性,内置模块和第三方包,你可以使用它们在代码中实现这些模型。但我们不会详细地介绍它们。本章内容将作为你进一步研究和阅读的切入点。本章主要指出一些基本理念,并帮助决定是否真的需要并发,如果是,哪种方法将最适合你的需求。
13.1 为什么需要并发
在我们回答“为什么需要并发”这一问题之前,我们需要问什么是并发?
第二个问题的答案可能是令一些人感到意外,这些人曾经认为那是并行处理的同义词。但并发与并行是不同的。并发不是应用程序实现的问题,而只是程序,算法或问题的属性。并行只是并发问题的可能的方法之一。
Leslie Lamport在1976年的Time, Clocks, and the Ordering of Events in Distributed Systems一文中说道:
如果两个事件互不影响,则两个事件是并发的。
通过推断程序、算法或问题中的事件,我们可以说,如果它们可以被完全或部分分解为顺序无关的组件(单位),则这些事件是并发的。可以彼此独立地处理这些单元,并且处理的顺序不会影响最终的结果。这意味可以同时地或并行地处理它们。如果我们以这种方法处理信息,那么我们实际上是直面并行处理但这还不是强制性的。 ...
Get Python高级编程(第2版) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.