在 8 核机器上可以有效地并发生成多少个进程?
How many processes can be efficiently spawn concurrently on an 8-core machine?
我正在使用 python 的多处理模块在 8 核 iMac 上打开多个并发进程。 activity 显示器上有些东西让我感到困惑。如果我发送 5 个进程,每个进程都被报告使用接近 100% CPU,但 CPU 负载总体空闲率约为 64%。如果我发送 8 个并发进程,它会达到大约 50% 的使用率。
我是否正确解释了 activity 监视器数据,这意味着我可以同时高效地生成 8 个以上的进程?
推测您的“8 核”机器支持 SMT(超线程),这意味着它有 16 个执行线程或 "logical CPUs"。如果您 运行 8 CPU-bound 进程,您占用了这 16 个中的 8 个,这导致报告的 50% 使用率/50% 空闲。
不过,这有点误导,因为 SMT 线程 不是 独立的内核;他们在同一个核心上与 "SMT sibling" 共享资源。只使用其中的一半并不意味着您只能获得一半的可用计算能力。根据工作负载,占用两个 SMT 线程的吞吐量可能是只占用一个线程的 150%;它实际上可能 较慢 由于缓存争用,或介于两者之间。
所以你需要自己测试;您的应用程序的最佳点可能是 8 到 16 个并行进程之间的任何地方。真正知道的唯一方法是测量。
我正在使用 python 的多处理模块在 8 核 iMac 上打开多个并发进程。 activity 显示器上有些东西让我感到困惑。如果我发送 5 个进程,每个进程都被报告使用接近 100% CPU,但 CPU 负载总体空闲率约为 64%。如果我发送 8 个并发进程,它会达到大约 50% 的使用率。
我是否正确解释了 activity 监视器数据,这意味着我可以同时高效地生成 8 个以上的进程?
推测您的“8 核”机器支持 SMT(超线程),这意味着它有 16 个执行线程或 "logical CPUs"。如果您 运行 8 CPU-bound 进程,您占用了这 16 个中的 8 个,这导致报告的 50% 使用率/50% 空闲。
不过,这有点误导,因为 SMT 线程 不是 独立的内核;他们在同一个核心上与 "SMT sibling" 共享资源。只使用其中的一半并不意味着您只能获得一半的可用计算能力。根据工作负载,占用两个 SMT 线程的吞吐量可能是只占用一个线程的 150%;它实际上可能 较慢 由于缓存争用,或介于两者之间。
所以你需要自己测试;您的应用程序的最佳点可能是 8 到 16 个并行进程之间的任何地方。真正知道的唯一方法是测量。