跟进David Beazley's paper关于 Python 和 GIL,将 Python 程序(带有 GIL 的 CPython 等)限制为基于 Windows 的多核系统中的单个 CPU 是一个好习惯吗?
它会提高性能吗?
更新:假设使用多个线程(不确定是否有区别)
最佳答案
该论文确实暗示,在特定情况下,将程序限制为单核可以提高性能。。但是,您需要处理许多问题:
- 他的测试主要针对计算密集型线程,而不是 IO 密集型线程。如果您使用的线程经常自动阻塞(例如在等待客户端的 Web 服务器中),那么您根本不会遇到 GIL 问题。
- GIL 问题专门处理线程,而不是进程。我可能读错了你的问题,但你似乎是在问将所有 Python 程序限制为单个核心。使用进程进行并行的程序不会遇到 GIL 问题,并且将它们限制为单个核心会使它们变慢。
- Python 3.2 中的 GIL 截然不同(正如 David 在 this video 中提到的那样。GIL 已被明确更改以处理此类问题。虽然它仍然存在问题,但不再有这个问题.
总而言之,只有当您运行以下程序时,您才会希望强制操作系统将程序限制为单个核心,从而使您的生活变得复杂:
- 多线程
- 计算密集型
- 低于 Python 3.2
在多核机器上编程。
关于python - 将 GILed Python 程序限制在单个 CPU 上会提高性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6667750/