繁体   English   中英

多个 Python 程序是否使用不同的 Cpu 内核?

[英]Do Multiple Python Programs Use Different Cpu Cores?

我有一个关于 Python 和负载平衡的问题。 考虑一个具有 16 个虚拟 cpu 核心和单个 Python Rest-Service 包装在 Docker 中的虚拟机。 我想它在运行时只会使用一个虚拟核心而不是 16 个。

现在考虑在 docker 中运行的 Python Rest-Service 的 8 个副本在负载均衡器(上游)后面并行组成。 他们使用 16 个内核中的 8 个吗? 如果是这样,他们怎么知道使用哪一个?

虚拟内核也有什么不同,那么具有真正 16 个内核的真实系统呢?

如果有人有任何经验或知识,如果你能分享,我会很高兴。

谢谢!

REST 服务是使用一个内核还是多个内核取决于您的编码方式。 例如,您可以拥有一个处理请求的 python 进程池。

假设您有一个 python 进程。 由于 python 在运行字节码时会抓取全局解释器锁 (GIL),因此即使它有多个线程,一次也只会运行一个。 如果您有多个 python 进程,每个进程都有自己唯一的 GIL,因此这些进程将使用多个内核并行运行。

它们的运行方式取决于操作系统,它不关心它是否运行 python 或其他任何东西。 在任何给定时间,都有 X 个线程可用。 操作系统调度程序使所有内核尽可能地运行。 当一个内核上的代码进行操作系统调用时,或者当某个时间过去时,操作系统可能会抓取一个待处理线程以在该内核上执行。 旧线程现在被放回等待队列中。

关于哪些线程获得最大优先级等有一些规则……但这完全取决于操作系统,所以在谈论一般意义时你必须含糊其辞。

暂无
暂无

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

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