有人可以闡明它嗎?我可以運行8個線程,但我很確定我們可以在JAVA或C++中創建超過8個線程(雖然不知道)。我有一個i5,在研究併發時,我爲任務做了10個線程。我只是想了解CPU的核心評級如何與線程相關。線程(在java或C++程序中)和CPU中的內核數量之間的關係是什麼?
回答
您引用的線程稱爲軟件線程;只要您的操作系統允許,您可以根據需要創建任意數量的軟件線程。每個軟件線程或代碼片段可以同時運行和其他。
對於每個核心,有至少一個硬件線程到該操作系統可以指定一個軟件線程。例如,如果您有8個內核,則您有一個容量爲8的硬件線程池。您可以將數十或數百個軟件線程映射到此8槽池,其中只有8個線程實際上在硬件上同時運行,即並行。
軟件線程就像共享同一臺計算機的人一樣。每個人都可以使用這臺電腦一段時間,不一定完成他的任務,然後把它交給另一個。
硬件線程就像每個人都有一臺計算機的人。他們都可以同時處理他們的任務。
注:對於i7處理器,有two hardware threads(所謂超線程)在每個核心。所以你可以有多達16個線程並行運行。
「線程」是一個軟件抽象,它定義了一個通過程序執行的單一自我一致的路徑:在大多數現代系統中,線程的數量基本上只受內存的限制。但是,CPU只能運行相對較少的線程數。一般來說,「核心計數」是CPU可以並行運行多少個線程:如果有更多的線程想要運行,而不是有可用的內核,操作系統將使用某種類型的時間片來讓所有的線程有一些時間來執行。
有一大堆的術語被當談到攔腰抱住「內核:」
- 處理器數量:物理CPU芯片的系統主板上的號碼。這是唯一重要的數字,直到具有多個內核的CPU變得可用。
- 邏輯核心數量:該系統的硬件可以運行的線程數量平行
- 物理核心數量:該系統具有的CPU執行的硬件拷貝的數量 - 這並不總是等於到邏輯核心數,由於它們使用單片硬件的並行
- 模塊運行多個線程的功能,如SMT(「同時多線程」)計數:近期(推土機衍生)AMD處理器已經使用這是一種混合SMT和t的體系結構他是標準的單核心物理核心模型。在這些CPU上,每個邏輯核心都有一個單獨的整數執行硬件副本,但是兩個邏輯核心共享一個浮點單元以及讀取和解碼前端; AMD稱該單元包含兩個邏輯核心模塊。
還應該簡要提及的是,GPU和圖形卡具有巨大的核心數量並且並行運行大量(數千)線程。權衡的是,GPU內核的內存非常少,而且通常是一種嚴格限制的編程模型。
邏輯核心數用於分區硬件。任何內核如果以這種方式構建,都可以運行多個線程。 – Dru
關於事物的硬件方面已經有一些好的答案,但沒有太多關於事物的軟件方面的討論。
我相信你缺少的基本事實是並非所有線程都必須始終執行。當一臺8核心機器上有數千個線程時,只有少數線程在任何給定的時間都運行。其他人坐在一起無所事事,直到一些處理器時間變得自由。這具有巨大的優勢,因爲線程可能正在等待其他資源。例如,如果我有一個線程試圖從磁盤讀取文件,那麼在等待硬盤數據加載到RAM中時,沒有理由佔用CPU時間。另一個例子是當線程正在等待來自其他機器的響應(例如通過互聯網的網絡請求)時。當你的線程數多於你的處理器一次處理時,操作系統和/或運行時(它取決於操作系統和運行時實現)負責決定哪些線程應該獲得處理器時間。這種設置可以讓您最大限度地提高機器的生產效率,因爲CPU週期幾乎可以隨時做一些有用的事情。
- 1. java內核中的CPU內核數量和線程數量之間的關係是什麼?
- 2. 內核線程和用戶線程之間的關係是什麼?
- 3. 與CPU核心的Java線程關係
- 4. virt_to_phys和Linux內核中CPU的MMU之間的關係是什麼?
- 5. JavaScript線程和Silverlight UI線程之間的關係是什麼?
- 6. GCD中線程和隊列之間的關係是什麼?
- 7. .NET程序集和CPU體系結構之間的關係是什麼?
- 8. cpu中的內核和線程
- 9. Java中main()方法和主線程之間的關係是什麼?
- 10. ftp.kernel.org中的內核tarball和git.kernel.org中的git樹之間的關係是什麼?
- 11. CPU和線程之間是否有任何關係?
- 12. shell和C程序之間的關係
- 13. Bundler和Rails應用程序之間的關係是什麼?
- 14. 什麼是網絡和iOS應用程序之間的關係
- 15. CPU使用率和正在使用的內存之間的關係是什麼?
- 16. 多CPU核心中的Java多線程
- 17. C++和Ruby之間的關係和依賴關係是什麼?
- 18. 吞吐量和Jmeter中的線程之間的關係
- 19. 編程和數學之間的關係是什麼?
- 20. Android中的Java和XML之間的關係是什麼?
- 21. java中的包和jar文件之間的關係是什麼?
- 22. 英特爾酷睿i *與內核數量之間的關係是什麼?
- 23. 關於CPU核心數量的多線程和並行度
- 24. 核心數據中提取與單向關係之間的關係是什麼?
- 25. 爲什麼在Java中,我的CPU綁定線程可能導致在內核空間中的操作?
- 26. Linux內核模塊中的內核線程之間的通信
- 27. JVM如何在CPU內核之間傳播線程?
- 28. Linux-PAM和內核之間的關係
- 29. 查找在內核例程中花費的CPU時間量
- 30. Java或C#的線程基於用戶空間線程或內核空間線程?
「任務」本質上是一個「虛擬CPU」。在Java中,一個線程對應於一個任務。處理器包含的「核心」(實際CPU)越多,它可以同時運行的任務就越多,但是如果比核心有更多的「就緒」任務,剩下的任務將由任務調度程序/調度程序「旋轉」,共享單個核心以某種「時間片」的方式。 –