我在共享集群上工作.我已经看到人们在这个集群上运行并行化的c代码,当我使用top来查看正在运行的进程时,会显示正在使用(例如)400%的CPU,因为他们对单个实例使用了四个处理器他们的代码.
现在有人正在运行(我听到的)一个并行化的Python代码.但是,不是顶部显示Python代码使用400%的CPU,而是显示为四个不同的进程,每个进程使用自己的处理器(100%).
我想知道,Python(并行化时)显示顶部运行多个不同的进程(而不是C)或者这个Python代码实际上并不是并行运行的吗?
我不知道Stack Exchange是否会成为这个问题的更好地方.因为我使用顶部我认为这个地方会更好.让我知道我是否应该移动它.
解决方法:
您在C中看到的是使用线程,因此进程使用是其所有线程的总和.如果有4个线程,每个CPU使用率为100%,则该过程将显示为400%
您在python中看到的几乎肯定是通过多进程模型的并行性.这是一个旨在克服Python的线程限制的模型. Python一次只能运行一个线程(参见Python Global Interpreter Lock – GIL).为了做得更好,可以使用最终创建进程而不是线程的多进程模块,这反过来在ps中显示为多个进程,然后每个进程可以使用高达100%的CPU,因为它们(每个)单个 – 螺纹.
我敢打赌,如果你运行ps -afeT,你会看到C程序的线程,但没有python程序的额外线程.