1

我在 Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz 中运行多线程应用程序 (Python2.7.3)。我以为它只使用一个核心,但使用“top”命令我看到python进程不断改变核心编号。在 top 命令中启用“SHOW THREADS”会显示在不同内核上工作的不同线程进程。

谁能解释一下?我从理论上知道多线程是在单核上执行的,这让我很困扰。

4

2 回答 2

3

首先,多线程意味着相反,即同时使用多个内核(通过线程)。在这方面,CPython 确实被削弱了,尽管每当你调用 C 代码(这包括标准库的部分,但也包括 Numpy 之类的扩展模块)时,阻止 Python 代码并发执行的锁可能会被解锁。您仍然可以拥有多个线程,它们只是不会同时解释 Python(相反,它们会非常频繁地轮流)。您还谈到“Python进程”——您是否混淆了术语,或者这个“多线程”Python 应用程序实际上是多处理当然,多个 Python 进程可以同时运行。

但是,从您的措辞中,我怀疑另一个混淆来源。即使是单个线程也可以在多个内核上运行……只是不能同时运行。哪个线程在哪个 CPU 上运行取决于操作系统,并且操作系统调度程序不一定将线程重新分配给它在挂起之前曾经运行过的同一 CPU(这是有益的,正如 David Schwartz 在评论,但不重要)。也就是说,单个线程/进程从 CPU 跳转到 CPU 是完全正常的。

于 2012-09-02T03:01:32.407 回答
-1

线程旨在利用可用的多个内核。如果您只有一个核心,它们也将在一个核心上运行。:-)

没有什么可担心的,您观察到的是“按预期工作”。

于 2012-09-02T02:56:25.993 回答