【问题标题】:What is the currently running thread on a multicore processor?多核处理器上当前运行的线程是什么?
【发布时间】:2013-03-19 10:51:49
【问题描述】:

我读到sleep() 使当前运行的线程进入睡眠状态。这对多核处理器也有效吗?我不确定,但它认为多核处理器会有多个“当前正在运行的线程”。

【问题讨论】:

  • 我希望它会影响执行特定代码的线程。

标签: java multithreading


【解决方案1】:

我读到 Sleep() 使当前正在运行的线程进入睡眠状态。这对多核处理器也有效吗?

是的。 sleep(...) 会在作为参数传递的时间内将它的执行线程置于睡眠状态。

但它认为多核处理器会有多个“当前正在运行的线程”。

没错。多核处理器将在同一时刻运行多个线程。

多核处理器上当前运行的线程是什么?

看到这个:Semantics of Thread.currentThread() on multicore/multi processor systems?

Thread.CurrentThread() 将在特定线程上执行。无论在哪个处理器上运行,都将返回相同的线程。

【讨论】:

    【解决方案2】:

    sleep 只会让调用它的线程进入睡眠状态。

    是的,在多核处理器上也是如此,因为多线程不一定需要多核电脑。单核处理器也可以处理多个进程,不是吗?

    【讨论】:

    • 可以,但它通过时间片和其他技术伪造并发。在单核 CPU 中,始终只有一个当前正在运行的进程和一个当前正在运行的线程。维基百科有一个很好的页面:en.wikipedia.org/wiki/Multitasking
    • 我知道 :)。我只是想让他思考。为了他的问题,我不想深入细节。
    【解决方案3】:

    操作系统为内核或更多内核提供“方向”。所以例如Windows 可以为多个内核提供方向。 Windows 可以运行多个进程。时间片给每个进程一定的时间来执行其任务。也就是说,一个进程被给予一定的时间来在核心上执行它的计算。由于 Windows(在此示例中)是抢占式的(Linux 也是如此),它将决定将哪个进程放在核心上以及放置多长时间。 现在一个进程可以有多个线程。每个线程就像 CPU 上的一个“进程”。同样,抢先操作系统决定何时运行哪个线程。在四 (4) 核上,您只能同时运行 4 个进程/线程。在单个内核上,您也可以运行 4 个进程,但一次只能运行一个。

    示例

    当您在四核上有 4 个进程且每 2 个线程时。 Windows 可以决定在每个内核上放置一个进程。 Windows 将决定每个内核将在分配给该内核的进程的 2 个线程之间切换。现在,当您将这两个线程之一置于睡眠状态时,Windows 不必在您将线程置于睡眠状态期间在线程之间切换,并且可以将所有时间都花在执行一个线程上。同时,其他内核上加载的其他 3 个进程的线程切换仍在继续。

    当然它比我上面总结的要复杂得多。

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多