Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 当线程数增加到硬件可能的线程数时,为什么性能会得到改善?_Python_Python 3.x_Multithreading - Fatal编程技术网

Python 当线程数增加到硬件可能的线程数时,为什么性能会得到改善?

Python 当线程数增加到硬件可能的线程数时,为什么性能会得到改善?,python,python-3.x,multithreading,Python,Python 3.x,Multithreading,在我的电脑中,我有16个逻辑核(multiprocessing.cpu\u count()=16)。我有一个大约有2000个独立进程的应用程序。我使用了具有不同线程数的多线程,结果如下 线程|总时间(s) 8 | 4225(~70分钟) 16 | 2733(~46分钟) 32 | 2156(~35分钟) 64 | 2123(~35分钟) 理论上,当线程数为16时,我应该得到最好的结果。即使线程数增加到16以上,我也会得到相同的结果。但是当线程数增加到32时,我得到了最好的结果。而结果似乎没有超

在我的电脑中,我有16个逻辑核(multiprocessing.cpu\u count()=16)。我有一个大约有2000个独立进程的应用程序。我使用了具有不同线程数的多线程,结果如下


线程|总时间(s) 8 | 4225(~70分钟)

16 | 2733(~46分钟)

32 | 2156(~35分钟)

64 | 2123(~35分钟)


理论上,当线程数为16时,我应该得到最好的结果。即使线程数增加到16以上,我也会得到相同的结果。但是当线程数增加到32时,我得到了最好的结果。而结果似乎没有超过这个数字。原因是什么?

严格地说,Python不能同时运行多个线程(因为GIL),因此任何以100%CPU使用率(例如,纯计算)运行Python代码的线程在使用更多线程时,性能总是会下降


从线程获得任何性能提升意味着您的代码中有一些I/O正在等待,这使得线程的CPU利用率降至100%以下。增加线程的数量可以让CPU填补这些空白。

并非所有内容都受CPU限制,也就是说,您的线程不会一直100%使用您的内核。通过在每个内核上运行多个线程,你正在利用空闲时间。你的第一段只部分正确。特别是通过I/O,GIL可以并将被释放。我打算“以100%CPU使用率(例如纯计算)运行Python代码的任何线程”来涵盖它。显然我失败了。我想说的是,IO让线程等待,所以它们并不是在“运行”。如果这句话更容易理解,欢迎您重新编写。@Amadan,我在代码中运行的进程是独立的。因此,我没有任何等待任何I/O的代码。