Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解释器占用了我130%的CPU。这怎么可能?_Python_Linux_Multithreading_Load - Fatal编程技术网

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

Python解释器占用了我130%的CPU。这怎么可能?,python,linux,multithreading,load,Python,Linux,Multithreading,Load,我目前正在使用python进行一些I/O密集型负载测试。我的程序所做的就是尽可能快地向目标服务器发送HTTP请求 为了管理这一点,我最多使用20个线程,因为我基本上受到I/O和远程服务器的限制 根据“top”,CPython在我的双核计算机上使用了130%CPU的峰值 这怎么可能?我以为吉尔阻止了这一切?还是Linux“计算”每个应用程序所消耗的资源的方式?顶部的100%指的是单个核心。在双核机器上,您最多有200%的可用空间 单线程进程只能使用单核,因此它被限制为100%。由于您的进程有多个线

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

为了管理这一点,我最多使用20个线程,因为我基本上受到I/O和远程服务器的限制

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


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

顶部的100%指的是单个核心。在双核机器上,您最多有200%的可用空间

单线程进程只能使用单核,因此它被限制为100%。由于您的进程有多个线程,因此没有任何东西可以阻止它使用这两个核心


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

在使用C扩展库调用释放GIL并在后台进行进一步处理的情况下,这是可能的。

如果您觉得这令人恼火,设置您的首选项(特别是系统监视器或等效工具的首选项)以启用“Solaris模式”,该模式将CPU%计算为总处理能力的一部分,而不是单核处理能力的一部分。

我不了解python,但我肯定经常看到linux系统监视器报告CPU使用率>100%,一直高达180%。不知道为什么。GIL是在I/O调用时发布的。我知道总的“可用百分比”是100*“核心计数”。因此,>100%意味着您的应用程序在多个核心上运行。但我不知道GIL是在I/O任务中发布的。不过,我还是不知道HTTP库是多线程的。你把处理器和内核搞混了!这不是定义CPU使用率百分比的一种非常奇怪的方法吗?你知道这和超读是怎么回事吗?我的计算机有4个超线程内核,但我从来没有看到报告的使用率超过~180%。因为AMD/Intel内核/处理器、超标量、超线程、Linux线程/进程、Windows线程/进程和调度存在差异。我要求任何人准确地跟踪“我的代码将有多并发?”事实并非如此。我想知道python如何一次使用多个内核,但这是因为我误解了GIL的作用。