Concurrency in Python

Concurrency and Parallelism

并发(Concurrency)并行(Parallelism) 是很容易混淆的两个概念.

StackOverFlow上自然有人提出过这个问题. What is the difference between concurrency and parallelism?.

这里引用得票数最高的答案 Answer from RichieHindle

Concurrency is when two or more tasks can start, run, and complete in overlapping time periods. It doesn’t necessarily mean they’ll ever both be running at the same instant. For example, multitasking on a single-core machine.
并发指的是两个或更多任务可以在交叉的时间周期中进行启动, 运行和终止. 它并不完全意味着这些任务可以在同一瞬间同时运行. 多任务在单核机器上就是很好的例子.(只有单个CPU, 但是需要执行多个任务, 所以这些任务会占用不同的时间片来进行运行.)

Parallelism is when tasks literally run at the same time, e.g., on a multicore processor.
并行指的是任务可以真正意义上的同时运行, 例如多核处理器.(假设处理器为4核, 那么该处理器上可以同时运行4个任务在这4个不同的核上.)

并发是逻辑上的同时发生(simultaneous), 而并行是物理上的同时发生.
并发性(concurrency)又称共行性, 是指能处理多个同时性活动的能力, 并发事件之间不一定要同一时刻发生.
并行(parallelism)是指同时发生的两个并发事件, 具有并发的含义, 而并发则不一定并行.

假设你吃饭吃到一半, 电话来了, 这个时候如果你

  1. 你一直到吃完了以后才去接, 这就说明你不支持并发也不支持并行.
  2. 你停了下来接了电话, 接完后继续吃饭, 这说明你支持并发.
  3. 你一边打电话一边吃饭, 这说明你支持并行.

并发的关键是你有处理多个任务的能力, 不一定要同时. 并行的关键是你有同时处理多个任务的能力.

所以, 如果用实例来举证的话, 并行更像是郭靖左手画圆右手画方(两边同时兼顾), 而并发更像是普通人左手画圆右手画方(因为普通人只能顾一边).

Official Guide

Python Docs – Library – concurrency 中包含了
1. threading — Thread-based parallelism
threading 模块用于实现线程级的并发, 但是因为python的GIL问题, 一般会考虑使用 multiprocessing 来实现进程级的并发.
2. multiprocessing — Process-based parallelism
3. concurrent.futures — Launching parallel tasks
concurrent.futures 提供了高级别的异步执行方法. 其中包含了 ThreadPoolExecutor, ProgressPoolExecutor (均继承自Executor), 方法返回结果为Future.
provides a high-level interface for asynchronously executing callables.
4. subprocess — Subprocess management
subprocess 一般用于孵化单个子进程用于完成一些常见的任务.
5. sched — Event scheduler
sched 用于进行任务的调度.
6. queue — A synchronized queue class
queue 用于实现生产者-消费者模式.

Person Understanding

References

Python Docs – Library – concurrency
What is the difference between concurrency and parallelism?
Answer from RichieHindle

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据