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

时间:2013-03-19 10:51:50

标签: java multithreading

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

3 个答案:

答案 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个进程。

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