【发布时间】:2017-05-05 04:02:33
【问题描述】:
https://code.tutsplus.com/articles/introduction-to-parallel-and-concurrent-programming-in-python--cms-28612 从我研究过的这个链接,我有几个问题 Q1:线程池(并发)和线程在这里有何不同?为什么我们看到性能改进。线程与 Que 有 4 个线程,每个线程在空闲时间协同运行,并在获得网站响应后从 Que 中选择项目。如我所见,线程池也在某种程度上做同样的事情。完成工作并等待经理分配任务;这与从 Que 中挑选新物品非常相似。我不确定这有什么不同以及为什么我看到性能改进。似乎我在这里解释极化是错误的。你能解释一下吗
Q2:问题 2:使用多处理所花费的时间更多。如果我有一个可以一次处理多个进程的多处理器,那么我的所有 4 个进程都应该由它一次处理。那是真正的并行化正在发生。另外,我在这里有一个问题——在这种情况下,由于 4 个进程正在运行相同的函数,GIL 不会尝试阻止它们执行相同的代码。让我们假设它们都共享一个更新的公共变量——比如检查的网站数量。那么 GIL 在这些多处理的情况下是如何工作的呢? 此外,这里是一次又一次地使用相同的进程,或者它们在每次工作后都会被杀死和创建——我认为使用的是相同的进程。此外,我认为性能问题是因为与并发线程阶段的轻量级线程相比,进程创建是昂贵的。那么您能否更详细地解释 GIL 是如何在这里工作以及进程如何运行的,它们是否协同运行(就像每个进程等待轮到它一样 - 就像进程中的线程一样)。或者这些进程是否使用多处理器真正并行运行。另外,我的另一个问题是如果我有一台 8 核机器,我想我可以同时或并行运行同一进程的 8 个线程。如果我有 8 核机器,我可以运行 2 个进程,每个进程有 4 个线程吗?我可以在 8 个内核上运行 8 个进程吗?我认为核心仅用于进程的线程,这意味着我不能在 8 个核心上运行 8 个进程,但我可以运行与我的 CPU 或多处理器系统一样多的进程,对吗?那么我可以运行 2 个进程,每个进程有 4 个线程吗?在我的 8 核机器上,有 2 个多处理器,每个处理器有 4 个内核?
【问题讨论】:
-
哈哈,子问题太多了,m8!我最终会回答的! :P
标签: multithreading parallel-processing multiprocessing ipython-parallel