Python解释器占用了我130%的CPU。这怎么可能?
我目前正在使用python进行一些I/O密集型负载测试。我的程序所做的就是尽可能快地向目标服务器发送HTTP请求 为了管理这一点,我最多使用20个线程,因为我基本上受到I/O和远程服务器的限制 根据“top”,CPython在我的双核计算机上使用了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%。由于您的进程有多个线
这怎么可能?我以为吉尔阻止了这一切?还是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的作用。