跟进David Beazley关于 Python 和 GIL 的论文,在基于 Windows 的多核系统中将 Python 程序(带有 GIL 的 CPython 等)限制为单个 CPU 是否是一种好习惯?
它会提高性能吗?
更新: 假设使用了多个线程(不确定是否有区别)
跟进David Beazley关于 Python 和 GIL 的论文,在基于 Windows 的多核系统中将 Python 程序(带有 GIL 的 CPython 等)限制为单个 CPU 是否是一种好习惯?
它会提高性能吗?
更新: 假设使用了多个线程(不确定是否有区别)
该论文确实暗示将程序限制为单个内核会在特定情况下提高性能。但是,您需要处理一些问题:
总而言之,您唯一想通过强制操作系统将程序限制为单核来使您的生活复杂化的时候是在运行以下命令时:
多核机器上的程序。
偏见:对于涉及繁重CPU处理的并行计算,我更喜欢消息传递和协作进程而不是线程编程(当然,这取决于问题)
你不应该将你的程序限制在一个核心上。Beazley 只是演示了一个特定问题,该问题在那些独特的条件下表现不佳(这些条件是 IO 绑定线程和 CPU 绑定线程相互竞争)。理想情况下,您希望通过使用不同的方法 ( import multiprocessing
) 来避免这些情况。
我认为最好的解决方案是使用多处理模块将您的 CPU 绑定任务放在其他进程中,以便它们利用自己的内核,以及线程中的 IO 绑定任务(或微线程/协程,如果您阅读了他的有趣论文:http: //www.dabeaz.com/coroutines/),因为 GIL 最适合这些类型的任务。
结论:Python 线程最适合 IO 密集型任务,而不是 CPU 密集型。