2013-03-19 69 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個進程的線程切換仍在繼續。

當然,它比我上面總結的要複雜得多。

相關問題