yad*_*taf 2 python linux multithreading load
我目前正在使用python 进行一些I/O密集型负载测试.我的所有程序都是尽可能快地向目标服务器发送HTTP请求.
为了管理这个,我使用多达20个线程,因为我基本上绑定了I/O和远程服务器限制.
根据'top',CPython在我的双核计算机上使用了130%CPU的峰值.
怎么可能?我以为GIL阻止了这个?或者它是Linux'计算'每个应用程序消耗的资源的方式?
Sve*_*ach 11
顶部100%指单核心.在双核机器上,您可以获得高达200%的可用性.
单个单线程进程只能使用单个核心,因此限制为100%.由于您的进程有多个线程,因此没有什么能阻止它使用这两个核心.
GIL仅阻止纯Python代码同时执行.许多库调用(包括大多数I/O东西)都会释放GIL,所以这里也没问题.与互联网上的大部分FUD相反,GIL很少降低现实世界的性能,如果确实如此,通常比使用线程更好地解决问题.