2015-04-13 128 views
0

這是一個理念問題:提高速度spplication - Java的

我不知道在哪裏把我的問題,對不起,(如果我的questios是題外話),請告訴我,我需要問這個題。我使用單線程應用程序,我使用一次和只有部分內存,但使用多線程(轉換我的單一應用程序到多線程)我可以提高速度(操作系統給我的應用程序更多的時間,如果我有n個線程)?

這個速度是在線程數的功能,

Supose我的OS正在與50個線程(多任務或服務),我的應用程序只能獲得(1/50)CPU的一部分,但如果我的應用程序有10個線程,那麼我的速度是CPU的(10/60)部分...假設所有線程具有相同的優先級...

顯然,這種「改善」不是線性的,這意味着速度會小於(10/60)。

你的概念是什麼?

+3

它完全取決於你的代碼是否可以通過使用多線程來加速 - 你知道[Amdahl's Law](http://en.wikipedia.org/wiki/Amdahl%27s_law)嗎? –

+0

聽起來好像你正試圖通過創建新線程來「竊取」來自其他進程的CPU時間。 (1)無論如何,大多數情況下,您可能無法以100%CPU運行,(2)操作系統通常會考慮到這種貪婪行爲,並降低整個過程的優先級。 – chrylis

回答

0

有更多的線程不會給你更多的CPU。單線程應用程序仍然可以達到100%單核利用率。優先級與你允許獲得多少線程數有關。

線程是關於將獨立計算與獨立計算分離,以便可以在同一時間進行多於一個計算以允許並行計算。

線程也很有用,因爲它們允許計算繼續進行,而其他計算正在等待像文件I/O這樣的較慢進程。

如果您的應用程序可以利用這些優勢,那麼它在多線程下可能執行得更快。但是一個好的測試值得一千個專家的意見。

請記住,確保多線程應用程序正確不是一件容易的事。