Python 解释器占用了我 130% 的 CPU。这怎么可能?

标签 python linux multithreading load

我目前正在使用 python 进行一些I/O 密集型负载测试。我的程序所做的就是尽快将 HTTP 请求发送到我的目标服务器。

为了解决这个问题,我使用了最多 20 个线程,因为我基本上受限于 I/O 和远程服务器限制。

根据“top”,CPython 在我的双核计算机上使用了 130% CPU 的峰值

这怎么可能?我以为 GIL 阻止了这个?还是 Linux“计算”每个应用程序消耗的资源的方式?

最佳答案

顶部的 100% 指的是单核。在双核机器上,您有高达 200% 的可用空间。

单个单线程进程只能使用单个内核,因此限制为 100%。由于您的进程有多个线程,因此没有什么能阻止它使用两个内核。

GIL 仅防止并发执行纯 Python 代码。许多库调用(包括大多数 I/O 内容)都会释放 GIL,所以这里也没有问题。与互联网上的许多 FUD 相反,GIL 很少会降低现实世界的性能,如果确实如此,通常有比使用线程更好的解决方案。

关于Python 解释器占用了我 130% 的 CPU。这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615449/

相关文章:

python - 在 Python3 中使用类型提示初始化 Optional Dict 的正确方法?

python - 管理/监控 flask 应用程序的最简单方法?

C - 当标准输入的缓冲区中已有数据时,在标准输入上选择()

php - 无法在 CentOs 7 中将 PHP 从 5.4 更新到更高版本

c++ - C++ 中的 Linux 音频捕获

multithreading - 为什么当子程序很昂贵时多线程执行不起作用?

javascript - 如何将 JavaScript 函数的结果放入 python 变量中。 PyQt

Python:在for循环中追加数组列

c - 带有互斥锁的 Pthreads 程序 - 每次都打印相同的字符串

C++多线程中断