我讀到關於綠色線程阻塞,並能明白,這些線程是由虛擬機或運行時,而不是由操作系統創建的,但我無法理解下面的語句I/O在綠色線程
當一個綠色的線程執行阻塞系統調用時,不僅是該線程被阻塞,而且該進程中的所有線程都被阻塞。
任何人都可以請解釋如何可能?
我讀到關於綠色線程阻塞,並能明白,這些線程是由虛擬機或運行時,而不是由操作系統創建的,但我無法理解下面的語句I/O在綠色線程
當一個綠色的線程執行阻塞系統調用時,不僅是該線程被阻塞,而且該進程中的所有線程都被阻塞。
任何人都可以請解釋如何可能?
實際上這很簡單。
「綠色線程」的虛擬機,裏面編程實現其調度CPU和內存當中,就像一個真正的OS調度之中的操作系統級別的進程和線程的資源。
但是從操作系統的角度來看,只有一個線程 - 虛擬機本身,所以當它進行阻塞系統調用時(代表其內部管理的一個「綠色線程」),這個單線程是自然而然地被封鎖,並且無法做任何事情,包括安排「綠色線索」,所以他們的「世界停止」也是如此。
謝謝。因此,我可以得出結論:單個Erlang進程可以創建數千個綠色線程,但會被os視爲單個線程,因此它會阻止? –
@Mukul Chakravarty 好了,事情比較複雜的使用Erlang一點(因爲它採用了相當先進VM),通過一般的原則仍然適用。 單個的Erlang VM將使用數OS級線程的* S *(通常等於多個可用的CPU OS內核),每個充當調度器,其能夠運行多個Erlang進程* P *(即,「綠色的線程「)。它還爲IO操作使用了許多輔助「異步」線程。 看到http://erlang.org/pipermail/erlang-questions/2010-September/053327.html一個更位深入的討論。 – zeppelin
謝謝,澄清事情。 –
這聽起來像維基百科的文章是說,綠色線程本身並本身並不能保證任何形式的併發性,並且它是由一個調度,綠色線程運行時或最終用戶,以確保調用異步執行。但我真的不知道:p鏈接中引用的書可能會提供更多的上下文 – dm03514