2013-03-19 51 views

回答

2

我读了Sleep()把当前正在运行的线程休眠。这对多核处理器也有效吗?

是的。 sleep(...)会把它的执行程序线程作为参数传递的时间。

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

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

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

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

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

0

睡眠只让线程进入睡眠状态。

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

+1

它可以,但它通过时间片和其他技术来伪造并发。在单核CPU中,总是只有一个当前正在运行的进程,并且只有一个当前正在运行的线程。维基百科有一个很好的网页:http://en.wikipedia.org/wiki/Multitasking – ckruse 2013-03-19 10:58:52

+0

我知道:)。我只是想让他思考。为了他的问题,我不想深入细节。 – 2013-03-19 11:32:12

0

操作系统向核心提供'方向',或更多。所以例如Windows可以指导多个内核。 Windows可以运行多个进程。时间切片为每个进程提供一定的时间来执行其任务。也就是说,一个进程被给予一段时间来在内核上执行它的计算。由于Windows(在这个例子中)是先发制人的(就像linux一样),它将决定将哪个进程放在内核上以及多长时间。 现在一个进程可以有多个线程。每个线程就像CPU上的一个“进程”。所以再次,先发制人的OS决定哪个线程在什么时候运行。在quad(4)内核上,您只能同时运行4个进程/线程。在一个核心上,你将能够运行4个进程,但是当时只能运行一个进程。

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

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

相关问题