这更多是一个理论问题。我有一台单核机器,虽然它很强大,但只有一个核心。现在我有两个选择:
多线程:据我所知,即使我有多个核心,由于GIL的限制,我也无法在我的机器上利用多个核心。因此,在这种情况下,没有任何区别。
多进程:这是我有疑问的地方。我能否在单核机器上进行多进程操作?或者每次都必须检查机器中可用的核心,然后运行完全相同或较少数量的进程?
有人能否指导一下我关于多进程和机器核心之间的关系。
我知道这是一个理论问题,但我的概念不是很清楚。
这更多是一个理论问题。我有一台单核机器,虽然它很强大,但只有一个核心。现在我有两个选择:
多线程:据我所知,即使我有多个核心,由于GIL的限制,我也无法在我的机器上利用多个核心。因此,在这种情况下,没有任何区别。
多进程:这是我有疑问的地方。我能否在单核机器上进行多进程操作?或者每次都必须检查机器中可用的核心,然后运行完全相同或较少数量的进程?
有人能否指导一下我关于多进程和机器核心之间的关系。
我知道这是一个理论问题,但我的概念不是很清楚。
这是一个大课题,但以下是一些提示。
在单核系统中,您可以同时使用多线程和多进程。
GIL限制了纯Python在计算密集型任务中使用多线程的效用,无论底层架构如何。对于I/O密集型任务,它们表现良好。如果它们没有任何用处,它们可能根本不会被实现。
对于纯Python软件,多进程始终是并行计算的更安全选择。当然,与多线程相比,多个进程更昂贵(因为进程不像线程那样共享内存;另外,进程与线程相比具有稍高的开销)。
然而,在单处理器机器上,对于计算密集型任务,多进程(和多线程)几乎不会带来额外的速度,并且它们实际上甚至会使您的速度变慢一些。但是,如果操作系统支持它们(这对于桌面,工作站,集群等非常普遍,但对于嵌入式系统可能不太常见),它们允许您有效地同时运行多个I/O密集型程序。
长话短说,这有点取决于您正在做什么...
multiprocessing 模块基本上会生成多个 Python 解释器实例,因此不必担心 GIL 问题。
如果您以前使用过 threading 模块,则 multiprocessing 使用相同的 API。
您似乎对多进程、线程(您将其称为多线程)和X核处理器感到困惑。
另请参阅: Python的PyPy实现