3

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

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

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

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

4

3 回答 3

15

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

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

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

于 2012-07-23T15:20:03.737 回答
1

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

于 2012-07-23T15:24:15.037 回答
0

如果您觉得这很烦人,请设置您的首选项(特别是系统监视器或等效工具的首选项)以启用“Solaris 模式”,该模式将 CPU 百分比计算为总处理能力的比例,而不是单核处理能力的比例.

于 2012-07-23T17:04:40.373 回答