2014-10-05 32 views
1

雖然經歷了大多數Java教程,他們提到線程是輕量級的過程。我知道線程創建中發生了什麼,但是我沒有得到線程的定義。在stackoverflow大部分時間也回答了這個問題。但那也讓我很困惑。無法得到「輕量級過程」背後的真實想法。任何人都可以用最簡單的方式解釋「線程是輕量級進程」的含義是什麼?爲什麼線程被稱爲輕量級進程?

+0

@PaRiMaLRaJ我看到了。但是這並沒有給我明確的想法。不能線索有更多的重量?不能線程有很多進程來完成?很多完成平均重量過程的任務嗎?這個答案並沒有解決我的問題。 – Maduri 2014-10-05 08:37:55

回答

0

你可以這樣稱呼它,因爲線程就像一個進程一樣,是一種並行的,併發的執行流程。但與進程相反,線程與同一進程中的其他線程共享相同的內存,而不是具有完全獨立的內存。

+0

好的親愛的。共享內存意味着我認爲其他線程也可以訪問該內存。但爲什麼我們說「輕量級」?不能有高/大的重量?不能線程做很重的過程? – Maduri 2014-10-05 08:22:05

+4

@Maduri在這種情況下的輕量級意味着在線程之間創建線程或切換執行通常比在單獨進程中花費的開銷要少很多。在任何情況下,確切的開銷數量都很大程度上取決於操作系統。 – 2014-10-05 08:36:59

+0

@ThomasStets我認爲你在一定程度上解決了我的問題。感謝很多親愛的。 「創建線程或在線程間切換執行」這意味着輕量級並不意味着線程必須完成的任務數量。我正確嗎?輕量級意味着切換或執行之間的負載?另一個問題是,如果該線程有很多任務,然後執行如何變得高效/輕量級? – Maduri 2014-10-05 08:55:13

1

我想這個解釋是由父進程生成的線程在內存中使用相同的地址空間這一事實引起的。另一方面,每個進程都有自己的地址空間。基於這一事實,進程的上下文切換比線程的上下文切換重要得多。

1

一個進程有不同的內存區域。根據OS的不同,一些可以被分組,不存在,或甚至子分裂:

  • 代碼
  • 存儲器(變量)
  • 堆(對於動態分配)

當你創建一個新的進程時,系統必須分配所有這些。對於一個線程,只分配一個新的堆棧,內存頭對於同一進程的所有線程都是共同的。