多处理时序不一致

2024-04-27 04:39:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 方法py算法进程表达式过程时间原因
1条回答
网友
1楼 · 发布于 2024-04-27 04:39:18

操作系统必须在数量少得多的cpu上调度所有进程。为此,它在每个CPU上运行一个进程,时间很短。之后,操作系统将进程调度出去,让其他进程运行,以便为进程分配公平的运行时间。因此,每个进程都必须等待CPU上一个正在运行的插槽。这些等待时间取决于等待运行的其他进程的数量,而且几乎不可预测。你知道吗

如果您使用时钟时间进行测量,等待时间将污染您的测量。为了更精确的测量,您可以询问操作系统进程使用了多少CPU时间。函数time.process_time()就是这样做的。你知道吗

在进程之间切换需要时间。多个进程访问相同的资源(文件、硬盘、CPU缓存、内存等)需要时间。对于CPU受限的进程,运行的进程比CPU多几个数量级会降低执行速度。如果启动的进程比CPU的数量稍微少一些,您将获得更好的结果。备用CPU仍然可以用于操作系统或其他一些无关程序所需的工作。你知道吗

相关问题 更多 >