我目前正在使用 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/