繁体   English   中英

Python:`multiprocessing.Process(…).start()`是否在同一个CPU上启动所有进程?

[英]Python: Does `multiprocessing.Process(…).start()` start all processes on the same cpu?

假设我有一个需要花费几秒钟来计算的函数,并且我有8个CPU(根据multiprocessing.cpu_count() )。

当我启动此过程少于8次且超过8次时会发生什么?

当我尝试执行此操作时,我观察到即使启动了20个进程,它们都在并行运行。 我希望它们一次运行8个,其他人将等待它们完成。

发生什么情况取决于底层操作系统。

但是通常有两件事:物理cpu核心和线程/进程(所有主要系统都有)。 操作系统会跟踪称为线程/进程(其中包括要执行的代码)的抽象事物,并在给定时间内将其映射到某个cpu内核,直到调用某些syscall(例如网络访问)为止。 如果您的线程比内核多(通常是这种情况,现代操作系统的后台运行着很多东西),那么其中的一些等待上下文切换(即轮到他们)。

现在,如果您有大量的cpu任务(硬计算),那么运行8个以上的线程/进程将看不到任何好处。 但是即使您这样做,他们也不会一个接一个地运行。 操作系统将在某个时间点中断CPU内核,以允许其他线程运行。 因此,操作系统将混合执行:一点点,一点点。 这样,每个线程/进程都会缓慢进行,不会永远等待。

另一方面,如果您的任务是io绑定的(例如,您进行HTTP调用以便等待网络),那么拥有20个任务将提高性能,因为当这些线程等待io时,操作系统会将这些线程置于保留状态并允许其他线程线程运行。 而且那些其他线程也可以执行io,这样就可以实现更高级别的并发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM