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