需要澄清例如,如果我使用雙核心處理器和寫一個Java程序而不使用線程。這是否意味着程序執行是連續而且它將只有使用單核之間的雙?在並行處理
例如,如果我使用雙核心處理器和寫入使用線程和同步的java程序。這是否意味着程序執行是並行並且它將使用所有可用核心(在這種情況下,兩個核心)?
如果我的推論是完全錯誤的話,什麼是關係線程之間,核心和並行?
需要澄清例如,如果我使用雙核心處理器和寫一個Java程序而不使用線程。這是否意味着程序執行是連續而且它將只有使用單核之間的雙?在並行處理
例如,如果我使用雙核心處理器和寫入使用線程和同步的java程序。這是否意味着程序執行是並行並且它將使用所有可用核心(在這種情況下,兩個核心)?
如果我的推論是完全錯誤的話,什麼是關係線程之間,核心和並行?
首先,JVM具有多個後臺線程,即使用戶代碼不會分叉另一個線程,也會使用多個CPU和內核。例如,無論用戶代碼如何,垃圾收集器都可以在另一個CPU中同時運行。
如果您的用戶代碼永遠不會分叉另一個線程,那麼JVM將永遠不會在多個CPU中同時運行您的代碼。如果你使用多線程編寫你的程序,那麼不能保證它會在多個CPU中運行,但肯定更有可能。這很大程度上取決於操作系統上運行的是什麼以及線程是如何被阻塞的。如果你的線程正在消耗大量的CPU週期,並且在現代操作系統上運行了很長時間,那麼是的,你的程序將使用兩個CPU。
您可以通過觀察您的進程是否在任何時候消耗超過100%的CPU來在Linux操作系統(以及其他Unixen)上進行驗證。您還可以使用ps
選項來顯示底層線程及其CPU使用情況。在這裏看到我的答案:Concurrency of posix threads in multiprocessor machine
謝謝你的解釋。如果JVM負責使用多個內核,爲什麼它被告知,Scala支持並行處理,但java不是?順便說一下,兩者都使用JVM。請澄清我。 – udi
你可以提供報價請@udi?我編寫了許多高性能的Java程序。如果有人說Java不使用多線程是錯誤的。 Java使用的JVM比Scala長得多。 :-) – Gray
對不起,我誤解了。 Java通過使用線程和同步來支持並行處理。但斯卡拉隱含地使用它。如果您找到空閒時間,請觀看此視頻http://www.youtube.com/watch?v=3jg1AheF4n0並澄清我的疑問。這是斯卡拉的Martin創造者的演講。 – udi