多处理时序不一致

multiprocessing timing inconsistency

我有大约 100 个进程。每个进程包含 10 个输入(逻辑表达式),每个进程的任务是找到最快的启发式算法来解决每个逻辑输入(我有大约 5 个启发式算法)。
当我 运行 分别处理每个进程时,结果与我 运行 并行处理所有进程时的结果不同(使用 python p1.py & python p2.py &…..)。例如,当 运行 分别处理输入 1(在 p1 中)时,发现第一个启发式算法是最快的方法,但是当并行时,相同的输入发现第五个启发式算法更快!
原因可能是 CPU 将在并行进程之间切换并弄乱时间,因此它无法给出每个启发式算法花费的正确时间来解决输入?
解决办法是什么?将进程数减半可以减少错误结果吗? (我 运行 我的程序在服务器上)

操作系统必须在更少的 CPU 上安排所有进程。为了做到这一点,它 运行 在每个 CPU 上执行一个进程一小段时间。之后,操作系统将进程调度出去让其他进程 运行 以便为进程分配公平的 运行ning 时间。因此每个进程都必须等待 CPU 上的 运行ning 槽。这些等待时间取决于等待 运行 并且几乎不可预测的其他进程的数量。

如果您使用时钟时间进行测量,等待时间会影响您的测量。要进行更精确的测量,您可以询问操作系统该进程使用了​​多少 CPU 时间。函数 time.process_time() 就是这样做的。

进程之间的切换很费时间。多个进程访问相同的资源(文件、硬盘、CPU 缓存、内存...)会耗费时间。对于 CPU 绑定进程,运行ning 进程比 CPUs 多几个数量级会减慢执行速度。通过启动比 CPU 数量略少的进程,您将获得更好的结果。备用 CPUs 仍可用于操作系统或其他一些不相关程序所需的工作。