我目前正在使用python进行一些 I / O密集型负载测试。我的所有程序都是尽可能快地向目标服务器发送HTTP请求。
为了解决这个问题,我使用最多20个线程 ,因为我基本上已经受到I / O和远程服务器限制的约束。
根据'top', CPython 在我的双核计算机上使用峰值130%CPU 。
怎么可能?我以为GIL阻止了这个?或者Linux是否计算每个应用程序消耗的资源?
答案 0 :(得分:11)
100%的顶部是指单个核心。在双核机器上,您可以获得高达200%的机器。
单个单线程进程只能使用单个核心,因此限制为100%。由于您的进程有多个线程,因此没有什么能阻止它使用这两个核心。
GIL仅阻止纯Python代码同时执行。许多库调用(包括大多数I / O东西)都会释放GIL,所以这里也没问题。与互联网上的大部分FUD相反,GIL很少降低现实世界的性能,如果确实如此,通常比使用线程更能解决问题。
答案 1 :(得分:0)
在使用C-extension库调用释放GIL并在后台进行一些进一步处理的情况下,这是可能的。
答案 2 :(得分:0)
如果您觉得这很烦人,请设置您的首选项(特别是系统监视器或同等工具的首选项)以启用“Solaris模式”,它计算CPU%占总处理能力的比例,而不是单个的比例核心的处理能力。