java 内核线程_Java线程和内核数

小编典典

进程与线程

在过去,每个进程仅具有一个执行 线程

,因此将进程直接调度到内核上(而在过去,几乎只有一个内核可以调度到该内核上)。但是,在支持线程的操作系统(几乎是所有现代操作系统)中, 线程

是调度的,而不是调度的进程。因此,在本讨论的其余部分中,我们将只讨论线程,并且您应该了解每个正在运行的进程都有一个或多个执行线程。

并行与并发

当两个线程都在运行 并行 ,它们都运行 在同一时间 。例如,如果我们有两个线程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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值