2010-07-27 46 views
4

我今天正在和一位有趣的interviewee談話,他堅持認爲改進我們Java應用程序性能的最好方法是重寫線程調度算法。鑑於我們依賴於JVM線程調度算法,我相當肯定這是不可能的,但我想知道是否有任何技術可以用來影響調度算法。或者如果甚至有令人信服的理由這樣做。控制java調度算法

PS有問題的應用程序沒有任何嚴重的性能問題。受訪者只是有點敏銳。

+0

難道你不問他爲什麼?如何? – 2010-07-27 12:57:58

+3

我認爲真正的答案是「不要僱用這個候選人。」 – finnw 2010-07-27 14:51:41

回答

5

他正在通過他的帽子說話。沒有Java線程調度算法。線程由操作系統安排,至少從1999年開始。

即使存在,也沒有任何明智的做法讓您有機會重寫它,而不是實現自己的JVM。

問他如何。

+1

我做到了。她說:「嗯......」 – Ceilingfish 2010-07-27 11:13:46

+1

+1和amen ...在Linux上可能比1999年稍晚一點。我不記得JVM何時切換到本地Posix線程庫,但確實在很久以前。 – NoozNooz42 2010-07-27 11:15:06

+0

因此,如果您想了解有關調度算法的更多信息,那麼對POSIX線程庫的一些研究可能會是最有用的資源?如果你的代碼在Windows上運行,我認爲這不是真的? – Ceilingfish 2010-07-27 11:24:59

2

我相當確定Java語言規範沒有具體指定線程(即處於RUNNABLE狀態的線程)是如何調度的。它可能需要某種公平性,但細節最有可能由JVM實現者決定(這意味着您沒有任何比它所提供的JVM更多的控制權)。

出於效率原因,他們中的大多數可能會將任務推遲到操作系統。

我會看看我是否可以找到一些參考。


可以「調整」過程的調度,通過例如設置優先級(從文檔的主題:每個線程都有一個優先級具有較高優先級的線程優先與低優先級執行線程。),或通過使用監視器同步線程。