![两个进程之间的协调开销是否很大?](https://linux22.com/image/107090/%E4%B8%A4%E4%B8%AA%E8%BF%9B%E7%A8%8B%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8D%8F%E8%B0%83%E5%BC%80%E9%94%80%E6%98%AF%E5%90%A6%E5%BE%88%E5%A4%A7%EF%BC%9F.png)
我有 24 个计算密集型进程,每个进程都在单个线程中运行,每个进程运行大约 2 小时。我的是8核CPU。
如果我同时运行所有 24 个进程与仅同时运行 8 个进程相比,对总运行时间有影响吗?
我说的是进程之间的协调开销,因此在这种情况下,每个 CPU 将被分配 3 个进程 - 这个开销很大吗?
答案1
这将取决于您的具体工作负载和架构的更多细节(例如,进程是否读取相同的内存,这些内存可能位于不同的 NUMA 节点上?),因此最好您能够测量性能并查看您得到的结果。
在 8 个执行单元上运行 24 个 CPU 密集型任务将需要打开和关闭任务调度,而运行与执行单元一样多的任务原则上应该需要更少的切换。我不认为与运行代码以在任务之间切换相关的开销会那么高,但是,当从 CPU 调度任务时,一个影响是该 CPU 缓存的状态有被刷新的风险(它们很可能会变成对于正在安排的新任务毫无用处);如果这种情况经常发生,可能会导致性能下降。
就您而言,将这三者相互进行基准测试可能是有意义的:
- 运行24个并发任务;
- 运行8个任务;
- 运行 8 个任务,为每个任务分配特定的 CPU。
您可以在Linux 上使用eg 执行(3) cpuset
。