2012-05-29 87 views
2

對於內核級線程,當一個線程阻塞某些I/O時,另一個線程可以自由運行,但是在User-Level-Threads中,如果一個線程被阻塞,會發生什麼?進程中線程之間的上下文切換

該進程是否仍然被阻塞,即沒有其他線程將執行或另一個線程將被安排運行。究竟會發生什麼?

+0

我認爲當你說你是在談論「綠色線程」用戶級線程? http://en.wikipedia.org/wiki/Green_threads – Gray

+0

相關http://stackoverflow.com/questions/1178785/user-thread-and-kernel-thread – Gray

回答

3

用戶級線程是用戶代碼片段以順序的方式執行 - 一個線程運行了一段時間,則控制到另一個線程等傳送。如果其中一個線程產生阻塞的系統調用,那麼整個過程將被阻塞。用戶級線程看起來像內核的單線程進程。多個CPU上沒有併發調度是可能的。

內核級線程的主要優點是,它們彼此獨立運行,並可以在不同的CPU進行調度。如果一個人阻止,其他人繼續執行。

+0

但據我所知,通過使用護套的我們可以將阻止系統調用轉換爲ULT的非阻塞系統調用。 因此,如果一個線程阻塞,它將控制傳遞給另一個線程(通過線程庫)。 – Luv

+0

是的,使用非阻塞I/O是規避用戶級線程限制的一種方法。但它增加了代碼或線程庫的複雜性。這是一個折中的問題:如果您使用一種線程方法而不是另一種線程方法,那麼您將獲得什麼以及會失去什麼。 –