2013-11-20 149 views
0

我在研究操作系統概念時學到了兩種類型的線程:內核級和用戶級。可以在多處理器環境中執行Java線程嗎?

我還了解到,內核級線程或進程也可以在多處理器環境中執行。

我對Java線程(作爲用戶級線程)有基本的疑問, 我們可以使用它們在多處理器環境中執行嗎?

+1

使用fork-join框架來處理多處理器。 – Masudul

回答

0

首先答案是肯定的。您可以通過在java中創建多個線程來利用多核處理器的全部功能。

據我所知,jvm採用了混合線程模型,包括內核線程和用戶線程。它有一個策略來決定何時創建哪種類型的線程。我相信當系統資源豐富時,它往往會創建內核線程並分配java線程對象來運行它。

0

聽起來像你談論的是好的舊Java 1.1「綠色線程」。這是操作系統沒有本地線程支持或至少沒有穩定的支持的一大困惑。至少在討論Oracle的參考實現時,此功能在當前的JVM實現中不再存在。 Java線程始終是這些JVM上的內核線程。

所以答案是肯定的,Java線程將受益於SMP,即多核CPU。它要求操作系統具有本地線程實現,但如果沒有它,整個SMP計算機就沒有多大意義。 JVM必須能夠使用它,在所有常見系統中都是如此。

+0

但是多處理依賴於內核,而且隨着操作系統概念說內核不知道用戶級線程,所以它如何識別多個處理器上的調度Java線程呢? – Winn

+0

這不是用戶級別的線程。再次閱讀我的答案:「Java線程始終是這些JVM上的內核線程」。 – Holger

+0

可能我不是很快捕捉到你,但是JVM進程知道java線程是內核級線程,但我的問題是原始操作系統內核如何知道它?因爲調度決策僅由原始內核調度程序進行。不是嗎? – Winn

相關問題