Python 当线程数增加到硬件可能的线程数时,为什么性能会得到改善?
在我的电脑中,我有16个逻辑核(multiprocessing.cpu\u count()=16)。我有一个大约有2000个独立进程的应用程序。我使用了具有不同线程数的多线程,结果如下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时,我得到了最好的结果。而结果似乎没有超
线程|总时间(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的代码。