我的电脑有 6 个核心。我必须运行 12 个进程。每个进程正好需要 10 分钟。
我想考虑(仅仅为了论证)两种情况:
我在每个核心上连续运行 2 个进程。应该需要 20 分钟才能完成。
我打开了 12 个终端窗口,并独立运行所有 12 个进程。因此,每个核心都需要在不同的进程之间来回切换,让我们感觉这 12 个进程是并行的。
问题
这有关系吗?这有很大区别吗?
我的基本想法
我预计第二种解决方案会花费更多时间,因为内核需要一些时间来回切换不同的进程。但是,与此同时,计算机上还有许多其他小进程在运行,例如由 root 运行。我预计第二种方案会花费更多时间,但那几乎可以忽略不计。我尝试了一下,没有注意到任何差异,但我的进程可能太短了,无法注意到任何事情。
答案1
差异可能微不足道。选项 1可以由于更少的 CPU 上下文切换而速度更快,但其他因素也会发挥作用。
正如你自己所观察到的,问题在于你的操作系统已经有数百个线程同时运行,因此 CPU 无论如何都会进行上下文切换。这可能使得选项 1 并不比选项 2 更好。
然而如果你的流程正在利用某种共享资源,例如 CPU 缓存、RAM、HDD、网络,您可能会发现这些资源的并发使用(或上下文切换)会产生巨大的差异。在这种情况下,连续执行可能会有很大帮助。
最后,测试两者并选择最适合您的方法:-)