子线程内的多处理



我正在学习多处理和多线程。

据我了解,线程在同一内核上运行,所以我想知道如果我在子线程中创建多个进程,它们是否也会仅限于该单个内核?

我正在使用python,所以这是一个关于该特定语言的问题,但我想知道它是否与其他语言相同?

我不是 pyhton 专家,但我希望这就像其他语言一样,因为它通常是操作系统功能。

过程

进程由操作系统执行,并拥有一个将要执行的线程。这通常是您的程序。您可以在流程中启动更多线程来执行一些繁重的计算或必须执行的任何操作。 但它们属于这个过程。

线

一个或多个线程由进程拥有,执行将分布在所有内核上。

现在回答您的问题

当您创建给定数量的线程时,这些线程通常应该分布在所有内核上。它们不仅限于执行 phyton 解释器的核心。 即使您从 phyton 代码创建子进程,该进程也可以并且应该在其他内核上运行。

你可以在这里阅读更多关于gernal概念的信息: 抢占式多任务处理

有一些不同语言的库将线程抽象为通常称为任务或其他东西的东西。 对于这些特殊情况,它们可能只是在创建它们的线程中运行。 例如。在DotNet世界中,有一个线程和一个任务。人们在谈论任务时经常滥用术语线程,该任务通常在创建的线程中运行。

每个程序都通过一个进程表示。进程是一个或多个线程在其中操作的执行上下文。一个进程中的所有线程共享分配给该进程的同一批虚拟内存。

Python(参考CPython,例如Jython和IronPython没有GIL(是特殊的,因为它具有全局解释器锁(GIL(,它可以防止线程化的python代码在多个内核上并行运行。只有发布 GIL 的代码才能真正并行运行(I/O 操作和一些 C 扩展,如 numpy(。这就是为什么您必须将多处理模块用于需要并行运行的 CPU 绑定 python 代码。使用多处理模块处理启动,然后运行它自己的python解释器实例,因此您可以真正并行处理代码。

请注意,即使是单线程 python 应用程序也可以在不同的内核上运行,不是并行的,而是顺序的,以防操作系统在上下文切换发生后重新安排执行到另一个内核。

回到你的问题:

如果我在子线程中创建多个进程,它们也会限制在该内核上吗?

您不会在线程内创建进程,而是生成新的独立 python 进程,这些进程具有与原始 python 进程相同的限制,并且新进程的核心线程将在哪些内核线程上执行取决于操作系统(...只要你不操纵进程的核心亲和力,但我们不要去那里(。

相关内容

  • 没有找到相关文章

最新更新