python - 为什么当线程数增加到超过硬件可能的线程数时性能会提高?

标签 python python-3.x multithreading

在我的电脑中,我有 16 个逻辑核心(multiprocessing.cpu_count()=16)。我有一个具有大约 2000 个独立进程的应用程序。我使用了不同线程数的多线程,结果如下。

<小时/>

话题 |总时间

8 | 4225(约 70 分钟)

16 | 2733(约 46 分钟)

32 | 2156(约 35 分钟)

64 | 2123(约 35 分钟)

理论上,当线程数为 16 时,我应该得到最好的结果。即使线程数增加到 16 以上,我也应该得到相同的结果。但是当线程数增加到 32 时,我得到最好的结果.结果看起来在该计数之上没有变化。这是什么原因?

最佳答案

严格来说,Python 不能同时运行多个线程(因为 GIL),因此任何以 100% CPU 使用率运行 Python 代码的线程(例如纯计算)总会随着线程数量的增加而降低性能。

从线程中获得任何性能提升意味着您的代码中有一些正在等待的 I/O,这使得您的线程的 CPU 利用率降至 100% 以下。增加线程数量可以让 CPU 填补这些空白。

关于python - 为什么当线程数增加到超过硬件可能的线程数时性能会提高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55331369/

相关文章:

Python 和解析 IRC 消息

python - 如何在 Spark 中将多个列作为逻辑回归分类器中的特征传递?

python - 在Python中将列表从一个函数传输到另一个函数

python - 在python中递归定义函数

python-3.x - 如何读取文本数据并转换为pandas dataframe

ios - CGPDFDocument线程

ruby-on-rails - Rspec 应该等待线程完成

python - JPype 的 properties access shadows 方法用属性名

python - 在 numpy 数组中的所有项目周围添加 0

c++ - 通过在共享模式下获取互斥锁来写入共享变量(而不是在独占模式下)