雖然經歷了大多數Java教程,他們提到線程是輕量級的過程。我知道線程創建中發生了什麼,但是我沒有得到線程的定義。在stackoverflow大部分時間也回答了這個問題。但那也讓我很困惑。無法得到「輕量級過程」背後的真實想法。任何人都可以用最簡單的方式解釋「線程是輕量級進程」的含義是什麼?爲什麼線程被稱爲輕量級進程?
回答
你可以這樣稱呼它,因爲線程就像一個進程一樣,是一種並行的,併發的執行流程。但與進程相反,線程與同一進程中的其他線程共享相同的內存,而不是具有完全獨立的內存。
好的親愛的。共享內存意味着我認爲其他線程也可以訪問該內存。但爲什麼我們說「輕量級」?不能有高/大的重量?不能線程做很重的過程? – Maduri 2014-10-05 08:22:05
@Maduri在這種情況下的輕量級意味着在線程之間創建線程或切換執行通常比在單獨進程中花費的開銷要少很多。在任何情況下,確切的開銷數量都很大程度上取決於操作系統。 – 2014-10-05 08:36:59
@ThomasStets我認爲你在一定程度上解決了我的問題。感謝很多親愛的。 「創建線程或在線程間切換執行」這意味着輕量級並不意味着線程必須完成的任務數量。我正確嗎?輕量級意味着切換或執行之間的負載?另一個問題是,如果該線程有很多任務,然後執行如何變得高效/輕量級? – Maduri 2014-10-05 08:55:13
我想這個解釋是由父進程生成的線程在內存中使用相同的地址空間這一事實引起的。另一方面,每個進程都有自己的地址空間。基於這一事實,進程的上下文切換比線程的上下文切換重要得多。
一個進程有不同的內存區域。根據OS的不同,一些可以被分組,不存在,或甚至子分裂:
- 代碼
- 存儲器(變量)
- 堆
- 堆(對於動態分配)
當你創建一個新的進程時,系統必須分配所有這些。對於一個線程,只分配一個新的堆棧,內存頭對於同一進程的所有線程都是共同的。
- 1. 輕量級線程
- 2. 爲什麼HTML的DIV輕量級?
- 3. 爲什麼JSON比XML更輕量級?
- 4. 爲什麼Java中的用戶級線程稱爲「綠色」?
- 5. 爲什麼線程名稱爲空?
- 6. 爲什麼當我只創建兩個時,`ps` list> 2個Java線程/「輕量級進程」?
- 7. 什麼是「輕量級交易」,爲什麼他們這麼稱呼?
- 8. 的Linux用戶空間線程,內核線程,輕量級進程
- 9. 輕量級線程池庫中的.NET
- 10. 輕量級可移植C++線程
- 11. Java中的輕量級線程?
- 12. 爲什麼我的線程被終止?
- 13. 爲什麼線程被多次創建?
- 14. 爲什麼sql存儲過程被稱爲存儲過程
- 15. 爲什麼node.js進程被殺死?
- 16. 爲什麼線程進入WaitSleepJoin狀態?
- 17. 重量輕,重量輕的線程
- 18. 輕量級與重量級過程
- 19. 程序被稱爲
- 20. T-SQL--被稱爲當前進程
- 21. 爲什麼一個進程在操作系統中被稱爲抽象?
- 22. 爲什麼需要線程
- 23. 爲什麼從線程
- 24. 爲什麼C++被稱爲面向對象的編程語言?
- 25. 爲什麼css被稱爲級聯樣式表?
- 26. 爲什麼proguard進程AndroidManifest.xml
- 27. 爲什麼多線程環境被認爲是有害的?
- 28. 爲什麼OCaml的線程被認爲是「不夠」?
- 29. 爲什麼Arduino程序稱爲草圖?
- 30. 爲什麼增量加載和增加線程被認爲是最佳實踐?
@PaRiMaLRaJ我看到了。但是這並沒有給我明確的想法。不能線索有更多的重量?不能線程有很多進程來完成?很多完成平均重量過程的任務嗎?這個答案並沒有解決我的問題。 – Maduri 2014-10-05 08:37:55