小编典典
进程与线程
在过去,每个进程仅具有一个执行 线程
,因此将进程直接调度到内核上(而在过去,几乎只有一个内核可以调度到该内核上)。但是,在支持线程的操作系统(几乎是所有现代操作系统)中, 线程
是调度的,而不是调度的进程。因此,在本讨论的其余部分中,我们将只讨论线程,并且您应该了解每个正在运行的进程都有一个或多个执行线程。
并行与并发
当两个线程都在运行 并行 ,它们都运行 在同一时间 。例如,如果我们有两个线程A和B,则它们的并行执行将如下所示:
CPU 1:A ------------------------->
CPU 2:B ------------------------->
当两个线程运行的 同时 ,它们的执行 重叠
。重叠可以两种方式之一发生:要么线程同时执行(即,如上所述,并行执行),要么它们的执行在处理器上交织,如下所示:
CPU 1:A -----------> B ----------> A -----------> B -------- ->
因此, 出于我们的目的 ,可以将并行性视为并发的特殊情况*
排程
但是,我们能够生成一个线程池(比方说30个),该线程池的数量要大于我们所拥有的内核(让我们说4个)的内核数量,并使它们并发运行。如果我们只有4个核心,这怎么可能?
在这种情况下,它们可以并发运行,因为CPU调度程序为这30个线程中的每个线程分配了一部分CPU时间。某些线程 将
并行运行(如果您有4个核心,则任何时候4个线程将同时并行运行),但是所有30个线程将同时运行。之所以可以去玩游戏或浏览网络,是因为这些新线程被添加到线程池/队列中,并且还分配了一部分CPU时间。
逻辑与物理核心
根据我目前的理解,一个核心一次只能执行1个进程
这不是 很 真实。由于非常聪明的硬件设计和流水线工作太长了(我不理解),一个物理核心实际上可能同时执行 两个完全不同的执行线程
。如果需要的话,请稍稍咀嚼一下这句话-这仍然让我震惊。
这种惊人的壮举被称为同时多线程(或通称超线程,尽管这是此类技术的特定实例的专有名称)。因此,我们具有 物理核心 (即实际的硬件CPU核心)和
逻辑核心 (即操作系统告诉软件可用的核心数)。逻辑核心本质上是一种抽象。在典型的现代Intel CPU中,每个物理核心都充当两个逻辑核心。
有人可以解释它是如何工作的,并建议对此做一些很好的阅读吗?
如果您真的想了解进程,线程和调度如何协同工作,我将推荐 操作系统概念 。
即使在我们自己的堆栈溢出中, 并行 和 并发 术语的确切含义也引起了激烈的争论。这些术语的含义在很大程度上取决于应用程序领域。
2020-09-15