在我的工作场所,有一个共享的强大的 24 核服务器,我们在其上运行我们的工作。为了利用多核 CPU 的全部功能,我编写了一个多线程版本的长时间运行程序,这样每个内核上同时运行 24 个线程(通过threading
库中的库Jython
)。
如果没有其他作业在运行,程序会快速运行。但是,我在一个内核上同时运行一项大工作,因此在该特定内核上运行的线程需要很长时间,从而减慢了整个程序的速度(因为线程需要在最后加入数据)。然而,其他 CPU 上的线程早已完成执行——所以我基本上有 23 个内核空闲,1 个内核运行线程和繁重的工作,或者至少这是我的诊断。通过查看time
命令的输出进一步证实了这一点,系统时间与用户时间相比非常低(这意味着有很多等待)。
Linux
如果一个 CPU 被加载而其他 CPU 空闲,操作系统(在这种情况下)是否不会将作业切换到不同的 CPU?如果没有,我可以在我的程序中执行此操作吗(在 中Jython
)。偶尔查询不同的 CPU 负载,然后切换到相对空闲的 CPU 负载应该不难。
谢谢。