首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:`multiprocessing.Process(...).start()`会在同一个cpu上启动所有进程吗?

Python:`multiprocessing.Process(...).start()`会在同一个cpu上启动所有进程吗?
EN

Stack Overflow用户
提问于 2018-07-19 04:55:16
回答 1查看 50关注 0票数 0

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

当我启动这个进程少于8次和超过8次时会发生什么?

当我尝试这样做时,我观察到,即使我启动了20个进程,它们也都是并行运行的。我希望他们一次运行8次,其他人会等他们完成。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-19 04:59:59

具体发生什么取决于底层的操作系统。

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

现在,如果您有cpu密集型任务(计算困难),那么当运行超过8个线程/进程时,您将看不到任何好处。但即使你这样做了,它们也不会一个接一个地运行。操作系统会在某个时刻中断cpu核心,以允许其他线程运行。所以操作系统会混合执行:一点这个,一点那个。这样,每个线程/进程都会缓慢地进行,而不会等待很久。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51410836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档