【发布时间】:2016-07-23 21:55:15
【问题描述】:
假设我的机器上有 4 个内核,并且我有一个生成 4 个线程的进程,虽然这是当前计划的进程,但所有 4 个内核是否都为进程的 4 个线程保留?
【问题讨论】:
-
Linux 实际上是schedules threads,而不是进程。当我们谈论调度进程时,我们通常指的是经典的、简化的单线程进程。
标签: linux multithreading pthreads
假设我的机器上有 4 个内核,并且我有一个生成 4 个线程的进程,虽然这是当前计划的进程,但所有 4 个内核是否都为进程的 4 个线程保留?
【问题讨论】:
标签: linux multithreading pthreads
这是一个非常复杂的问题。不过,我可以帮忙。作为一般规则,1 个进程仅使用 1 个核心。实际上,1个线程只能由1个核心执行。如果你有一个双核处理器,它实际上是将 2 个 CPU 粘在同一台电脑上。这些被称为物理处理器。这些物理处理器执行 1 个线程。虽然,有些 CPU 有 2 个物理内核,但能够同时运行 4 个线程。这些额外的 2 个线程在逻辑核心上运行。它们在物理上不存在,但在逻辑上存在于 cpu 中。
如果你的意思是线程,那么是 1 个进程 1 个核心。您可以在具有 4 个计算核心的 cpu 上运行 4 个线程(该名称包括物理和逻辑核心,因为单核 cpu 可能只有 1 个计算核心)。
如果进程是指任务管理器中进程选项卡中的程序或进程,则取决于程序的编写方式。
根据您的问题判断,如果一个进程产生 4 个线程,则取决于它在池中的位置。有数千个线程等待执行。每个程序或可执行文件的线程不必同时执行。
【讨论】:
您的进程的 4 个线程是独立调度的 - 进程本身没有被调度。
如果所有 4 个线程都可以同时运行,并且系统中没有其他更高优先级的可运行线程,那么所有 4 个线程可能会同时调度在您的 4 个内核上。
【讨论】: