python - 将 GILed Python 程序限制在单个 CPU 上会提高性能吗?

标签 python multicore gil

跟进David Beazley's paper关于 Python 和 GIL,将 Python 程序(带有 GIL 的 CPython 等)限制为基于 Windows 的多核系统中的单个 CPU 是一个好习惯吗?

它会提高性能吗?

更新:假设使用多个线程(不确定是否有区别)

最佳答案

该论文确实暗示,在特定情况下,将程序限制为单核可以提高性能。。但是,您需要处理许多问题:

  1. 他的测试主要针对计算密集型线程,而不是 IO 密集型线程。如果您使用的线程经常自动阻塞(例如在等待客户端的 Web 服务器中),那么您根本不会遇到 GIL 问题。
  2. GIL 问题专门处理线程,而不是进程。我可能读错了你的问题,但你似乎是在问将所有 Python 程序限制为单个核心。使用进程进行并行的程序不会遇到 GIL 问题,并且将它们限制为单个核心会使它们变慢。
  3. Python 3.2 中的 GIL 截然不同(正如 David 在 this video 中提到的那样。GIL 已被明确更改以处理此类问题。虽然它仍然存在问题,但不再有这个问题.

总而言之,只有当您运行以下程序时,您才会希望强制操作系统将程序限制为单个核心,从而使您的生活变得复杂:

  1. 多线程
  2. 计算密集型
  3. 低于 Python 3.2

在多核机器上编程。

关于python - 将 GILed Python 程序限制在单个 CPU 上会提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6667750/

相关文章:

ruby - 我们可以在 Ruby 中并行运行多线程吗?

Python 多线程和全局解释器锁

c - 双核 AMP 系统中的简单 C 互斥实现

python - Kubernetes POD 重启

python - FFT 后用 Python 计算单个峰值下的面积

python - 在 python3.5.2 Windows 10 中安装 Face_recognition 时出错?

Solr4.6 是否可以为多核使用通用配置文件?

java - 在桌面和移动 CPU 上使用 Java 进行并行处理

python - Python 3.2 及更高版本中的 sys.setswitchinterval

python - 未实现的 __init__()