我读到这sleep()
会使当前运行的线程进入睡眠状态。这对多核处理器也有效吗?我不确定,但它认为多核处理器会有多个“当前正在运行的线程”。
3 回答
我读到 Sleep() 使当前正在运行的线程进入睡眠状态。这对多核处理器也有效吗?
是的。sleep(...)
将把它的执行线程作为参数传递的睡眠时间。
但它认为多核处理器将有多个“当前运行的线程”。
真的。多核处理器将在同一时刻运行多个线程。
多核处理器上当前运行的线程是什么?
看到这个:多核/多处理器系统上的 Thread.currentThread() 的语义?
Thread.CurrentThread()
将在某个线程上执行。无论它在哪个处理器上运行,都将返回相同的线程。
sleep 只会使调用它的线程进入睡眠状态。
是的,在多核处理器上也是如此,因为多线程不一定需要多核电脑。单核处理器也可以处理多个进程,不是吗?
操作系统为内核或更多内核提供“方向”。因此,例如 Windows 可以为多个内核提供方向。Windows 可以运行多个进程。时间片给每个进程一定的时间来执行其任务。也就是说,一个进程被给予一定的时间来在核心上执行它的计算。由于 Windows(在此示例中)是抢占式的(Linux 也是如此),它将决定将哪个进程放在核心上以及放置多长时间。现在一个进程可以有多个线程。每个线程就像 CPU 上的一个“进程”。同样,抢先操作系统决定何时运行哪个线程。在四 (4) 核上,您只能同时运行 4 个进程/线程。在单个内核上,您也可以运行 4 个进程,但一次只能运行一个。
示例:
当您在四核上有 4 个进程,每 2 个线程时。Windows 可以决定在每个内核上放置一个进程。Windows 将决定每个内核将在分配给该内核的进程的 2 个线程之间切换。现在,当您将这两个线程之一置于睡眠状态时,Windows 不必在您将线程置于睡眠状态期间在线程之间切换,并且可以将所有时间都花在执行一个线程上。同时,线程的切换继续为加载在其他内核上的其他 3 个进程。
当然,它比我上面总结的要复杂得多。