【发布时间】:2018-05-22 05:23:09
【问题描述】:
由于 GIL 在 CPython 中无法实现受 CPU 限制的并行化。 官方文档建议使用多处理而不是多线程。 那么,如果与支持多处理和多线程中真正并行化的任何其他编程语言(如 Java 或 C++)的多处理/多线程性能相比,使用多进程是否比多线程更占用资源?
【问题讨论】:
-
这意味着什么? “资源密集”?我会说 Python 通常更“资源密集”(即更慢)。顺便说一句,“官方文档建议使用多处理而不是多线程”?你有报价吗?我敢肯定,它只在某些情况下被推荐,并不总是如此。任何方法都有优点和缺点。无论如何,无论选择哪种语言,线程之间的通信都比进程之间的通信更容易。也就是说,我认为这个问题离题有两个原因:它太宽泛并且主要基于意见。
-
"CPython 实现细节:在 CPython 中,由于全局解释器锁,只有一个线程可以一次执行 Python 代码(即使某些面向性能的库可能会克服这个限制)。如果你想要你的应用程序为了更好地利用多核机器的计算资源,建议使用 multiprocessing 或 concurrent.futures.ProcessPoolExecutor,但是如果要同时运行多个 I/O 密集型任务,线程仍然是合适的模型。 " docs.python.org/3/library/threading.html
-
没错,“如果您希望您的应用程序更好地利用多核机器的计算资源”,这不是您总是 i> 想要(甚至通常,甚至可能不经常)。
标签: python multithreading multiprocessing python-multiprocessing