在Java併發中,什麼使得線程「活動」?只是它不是閒置的事實?在技術上,是否仍在考慮「等待」或「暫停」線程?什麼定義了「活動」線程?
回答
從我可以說'活躍'一詞似乎用了很多,但沒有定義。該ThreadGroup.enumerate()
方法記載於:
複製到指定的數組的所有活動線程在此線程 組及其亞組。
和looking at the source for this,它正在檢查Thread.isAlive()
方法並將它們添加到枚舉中。由此我推斷術語「活動」和「活着」是可互換的並且「活着」被定義爲:
如果線程已經啓動並且尚未死亡,則線程處於活動狀態。
在這種情況下,我將「主動」表示他們正在執行代碼。非活動線程 - 在I/O調用或等待鎖定時被阻塞的線程 - 只消耗內存資源而不影響CPU(或者只是稍微)。
但是,它確實取決於你的線程在做什麼。如果每個線程遍歷數字來計算素數,則它們完全受CPU限制,並且實際上每個內核應該只有一個線程來最大化吞吐量。如果他們正在發送HTTP請求或執行文件I/O,則每個內核可以承擔不少的費用。最後,一個覆蓋所有線程的總括性聲明,一般不考慮他們在做什麼,這是毫無價值的。
我強烈推薦本書Java Concurrency in Practice,以獲得高質量併發Java編程主題的處理。
「活躍」這個詞在這裏用於正常的英語意義上。
活動這個詞的正常英語含義是「做某事」。因此,對於線程來說,「主動」的直觀含義是它們實際正在執行或準備執行。
在此引用的上下文:
「它通常是可以接受的4 - 每芯20個活動線程」
單詞「活性」與此一致地使用,儘管我會用數字來狡辯。 (20是相當高的IMO)。
但是,我認爲這是一個故意模糊的陳述。給出的答案是使用黃鼠狼短語「它被普遍接受」(而不是引用任何具體的來源)和廣泛的範圍(「4-20」)。因此,你可以說「活躍」一詞是故意模糊的另一個例子。
國際海事組織(IMO),報價的作者正在試圖使「太多線程不好」的一般觀點......沒有確切地說明「太多」是什麼。通過將「主動」意味着什麼來捆綁更精確的指導是毫無意義的。(而且是明確的,它是不可能說有多少「太多」是......一般。)
看看java.lang.Thread.State中
在其他非Java系統,主動等同於「RUNNABLE」。任務/進程/線程如果能夠主動運行代碼,則處於活動狀態。如果它不是(阻塞等)
斯蒂芬c。所述,活性被這裏使用更多作爲英語而不是Java的其懸掛。
「它通常是可以接受的4 - 每芯20活動線程」。 - Adam Tannon
從這個意義上說,我認爲這個詞的意思是「準備好運行」而不是「活着」或任何其他可能的含義。這是有道理的有沒有比就緒隊列中的線程屈指可數,因爲你不等待的線程得到任何價值,你調度和上下文切換開銷貢獻。另一方面,如果你的可用線程少於核心,那麼你沒有使用可用的資源。
http://stackoverflow.com/questions/3275210/what-is-the-thread-state-of-a-thread-after-thread-yield – andersoj 2012-04-28 15:07:15
- 1. 我的自定義線程池出了什麼問題?
- 2. 線程生活內活動
- 3. Android:什麼是活頁夾線程?
- 4. 什麼啓動JVM線程?
- 5. Android - 活動完成時線程會發生什麼?
- 6. 這個數組定義做了什麼?
- 7. 爲什麼在models.py中定義了get_absolute_url()?
- 8. 這段代碼定義了什麼類?
- 9. 這個宏定義了什麼?
- 10. C#:SHDocVw.WebBrowser_V1定義了什麼組合?
- 11. 線程池中的活動線程號
- 12. 什麼決定了TaskFactory派生作業的線程數量?
- 13. 爲什麼我的自定義活動永遠不會返回?
- 14. 爲什麼說 - 下劃線未定義
- 15. 瞭解特定線程啓動的線程數
- 16. ()在Perl的子程序定義中完成了什麼?
- 17. Facebook應用程序:什麼定義了「用戶」?
- 18. 爲什麼PCTSTR未定義,但定義了LPCTSTR?
- 19. 什麼定義了magento中的「自定義主題」?
- 20. JMeter的活動線程
- 21. 活動和線程處理
- 22. 活動線程訪問
- 23. 從線程調用活動
- 24. Jmeter日誌活動線程
- 25. 爲什麼JPA EntityManager根據定義不是線程安全的?
- 26. Stream.WriteTo鎖定了線程
- 27. public_activity自定義活動
- 28. ADF - C#自定義活動
- 29. getActivity()未定義爲活動
- 30. 爲什麼C#線程停止自動
什麼是這裏的「主動」出現的背景?這是一個過於籠統的術語,以很少的信息提供硬性定義。 – 2012-04-28 02:28:06
「每個核心擁有4-20個活動線程通常是可以接受的」。 – IAmYourFaja 2012-04-28 02:29:23
有源'java'線程是一個線程是* *資格被執行的當前運行的線程。這是一個線程,它已經離開了「新的」狀態並且已經達到(或重新獲得)了「可運行」狀態。活動線程佔用可運行線程池中的駐留。將上下文敏感的術語* active *視爲「當前正在運行的可運行線程」是常見的錯誤。 – 8bitjunkie 2014-02-12 15:08:01