為什麼我看到例如intel E5-2620 v3 執行緒只有12,但我工作管理員去看時執行緒卻有1千以上的號碼,我原本的理解是如果只有12個那號碼應該是1-12在跳怎麼會看到有一千多的號碼呢?
原po指的應該是這個
工作管理員->處理程序頁籤
原po看到「執行緒」欄位,以為這個是cpu規格中寫的「執行緒數量 12」
直覺認為應該只會有1~12,不可能超過
可以排除弄混PID/工作序列的可能
接下來,查了一下工作管理員欄位的說明
http://windows.microsoft.com/zh-TW/windows7/What-do-the-Task-Manager-memory-columns-mean?7ecde800
其中有一段
執行緒 處理程序中執行的執行緒數量。
所以原po看到的應該是該「程序」(程式/服務/軟體)所使用的「執行緒」數量
而這些「執行緒」要等作業系統分配去執行
例如,我自己寫一隻程式,要吃到50個執行緒,
不管在本機/其他電腦上,工作管理員看到的都會是50
至於作業系統怎麼分配資源讓這50個執行緒跑完,又是另一個故事了
1.終於有人看懂問題了,我看了提他CPU的規格資料確實如您所說有多少Core就有多少執行緒如果有HT的功能規格就直接寫2倍的執行緒,如果沒有HT的功能的CPU執行緒等於Core的數量
2.假設有個程式需要30個執行緒而我用2620 v3的CPU並且開啟HT所以我有12個執行緒,所以可以同時間執行最大12個執行緒,這時會先執行第一批的12個執行緒在執行第二批的12個執行緒最後再執行最後的6個執行緒,執行完後再回到第一批的執行緒,諸如此類不斷的輪迴是這樣嗎?
xsuper0027提到:
假設有個程式需要30個執行緒而我用2620 v3的CPU並且開啟HT所以我有12個執行緒,所以可以同時間執行最大12個執行緒,這時會先執行第一批的12個執行緒在執行第二批的12個執行緒最後再執行最後的6個執行緒,執行完後再回到第一批的執行緒,諸如此類不斷的輪迴是這樣嗎?
當然不是....
這樣來說,全部的CPU資源都給你的程式用就好了...那其他服務、背景程式怎麼辦?
放給它當機嗎?
wiselou大哥你到底懂不懂啊你都沒在看別人在說什麼還想要吐槽別人,我說的是假設情況,我當然知道OS有需要用的資源,通常為了釐清一個觀念我們都會用一個最簡易的方式來說明概念,你到底懂不懂啊,你應該跑錯地方了,你應該去吐槽幫幫忙不是IT幫幫忙,或是瞎扯幫幫忙都很適合你
但你的假設情況本身就是錯誤的啊...
工作排程是作業系統的工作, 作法也有很多種
wiki 就列了不少 https://en.wikipedia.org/wiki/Scheduling_(computing)
絕對不是你講的那麼單純分成什麼第一批第二批的輪流
xsuper0027提到:
你應該去吐槽幫幫忙不是IT幫幫忙,或是瞎扯幫幫忙都很適合你
是是是~您說的真好、真棒
除了multi threading之外,不知道您有沒有聽過SMP(Symmetric multiprocessing)這種架構呢?
看來你連基本的假設,狀態簡單化的這種基本概念都沒有,我想你還是不要回我這串好了
你好像搞錯什麼了...我不是來回答的,我是來湊熱鬧的
外獅佬是好心才回你的.
至於有沒有聽過SMP不重要,我只是單純對執行緒的概念有興趣而已
不是來回答的那你回文做什麼呢?
第一我標題就已經是"問題"而且你也回有關執行緒的東西雖然不是我想知道的,但你還是回答了
第二只是湊熱鬧有要對別人說吐槽兩個字嗎
第三如果你是湊熱你應該是到"討論""分享"之類的標題去湊熱鬧,連這都搞不清楚
to hitomitanaka:一開始他是好心我同意雖然不是我要的答案,但要吐槽別人我是覺得很糟糕的
SMP了解一下,會對你的執行續思考有多一層的了解
只是,需要動不動鬼吼鬼叫罵人嗎?
我也沒有說我懂,只是按照你的推測,要求幾個執行續,電腦就該配給你幾個core
這麼說,不是資源都被你吃光了嗎?
xsuper0027提到:
湊熱鬧有要對別人說吐槽
至於這個問題,這兩個字是我說的嗎?
我可不敢沾超人大的光啊
答案不是 你要不要. 懂??
前面kradark已經有說明,請去體會一下.
Hyper-Threading ... 跟 Multi-Threading 根本兩回事.
要學正確的觀念,不要拿一個很懶散把名詞亂縮減的作業系統顯示
出來的訊息,然後自己發想.....
To wiselou大大我看錯人了對不起請接受我12萬分的對不起,小弟只是對那些要回答別人卻又要數落別人的人很感冒,一切都是我的錯=="。
通常開機時,所執行過的系統程式、系統服務、Driver,就已經佔去多個 ID 了,若尚未到最大值 (通常是 65535),OS 通常不會在一次開機生命期中立即回收再使用,所以只會一直長,直到用完,再從頭循環。
只是循環通常不會從 1 開始。一般比較小的號碼,會保留給系統用。所以你自己的程式,有可能都是 3,4 位數。
ㄧ個是作業系統的工作序列
另外ㄧ個是硬體核心數量
你看到的 CPU 執行緒數量指的是 Intel 的超執行緒 (HT, Hyper Thread) 技術
可以參考維基的說明 https://zh.wikipedia.org/wiki/%E8%B6%85%E5%9F%B7%E8%A1%8C%E7%B7%92
也有人將其稱為虛擬核心, 開啟了 HT 功能以後, 工作管理員會看到核心數量變成兩倍 6->12
所以 Intel 這邊的執行緒數量指的是 CPU 同時可以處理的數量
我會建議你把 CPU 那邊的執行緒當成核心數量去看就好了, 比較不會混亂
實際上作業系統可能有超過上千個執行緒正在運作中
而這上千個執行緒就分享這 12 個 CPU 核心, 同一瞬間只會有 12 個執行緒得到 CPU 運算資源
作業系統的執行緒並不會受限於 CPU 的核心數量,不然某些程式動不動就開幾十幾百個執行緒那都不能用了
一般提到執行緒, 都 **不會是** 講 CPU 的 Hyper Thread, 而是講作業系統的執行緒
除非你是在關於電腦硬體的地方看到這個名詞
Hyper-threading是行銷名詞
有些解釋是說給消費者聽的
就算CPU只有一個核心
而且沒有支援超執行緒
還是可以執行多執行緒的程式碼
我記得java剛出來
我的電腦是Pentium 75
超純量的單核心處理器
也跑著multi-threading的範例
但不確定同時間到底跑幾個thread