![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 系統組件
(https://www.pcdvd.com.tw/forumdisplay.php?f=19)
- - 請問線程是什麼?
(https://www.pcdvd.com.tw/showthread.php?t=1152451)
|
---|
引用:
別鬧了!! CPU本身連OS都不認得,還能指望CPU去認得thread ?? CPU的眼中只有machine code , 其它都不認得!! :think: |
引用:
那我問你程式寫成多執行緒是怎麼執行的?既然CPU不認得,那程式多不多執行緒有差嗎? |
引用:
(嘆) ........... 如何執行請自行Google !! 前面也有人早就提到運作問方式 .... 程式如果有thread化 , 再加上Data之間沒有dependency , 可以充份發揮多核心CPU performance !! 假設4核心CPU , 可以發揮效能接近單核心的4倍 (通常是3.8-3.9左右) !! 這是它的最大好處 , 另一個好處是節省記憶體 , 有多省? 查Google吧.... 離題到此我就不再回應 !! :think: |
引用:
既然你知道多執行緒是什麼東西,竟然還能在CPU 1C幾T上鬼打牆這麼久 還真不容易 :laugh: 阿不就在軟體層面上把一顆CPU虛擬多CPU化,軟體只要當成有多顆CPU來用即可 不用管實際上到底有幾顆實體CPU,怎麼處理是OS跟CPU的事 |
引用:
你這句話應該跟樓主去說,不是跟我說!! 此樓就是在探討, intel 說的Thread , 與一般Programming的T是不是相同的 Thread !! 我的答案很明白地說 , 不是 !! 但你不是來討論Intel 的thread到底是何種真面目 , 只是冷嘲 , 我就不奉陪了!! 請便.... :think: |
引用:
intel的thread就是他家CPU裡邏輯處理器的數量,只是剛好也取名叫thread 像AMD就沒說他家的CPU有什麼Hyper threading 所以你一直在執著在intel的thread跟程式的thread差在哪? 覺得很怪,這也能扯這麼久,還「來一個1C 10000T 如何 ?? 」 :confused: 你把一顆CPU虛擬成10000顆CPU,有那麼多資源嗎你? |
1C就是一間工廠。
2T就是有樓中樓的工廠共兩層。 1C可以放4條生產線叫superscalar 2T理論上可以放8條生產線。 那為什麼還要1C2T?那是因為2C的稅金比1C2T貴。[畢竟兩間工廠貴,儘管樓中樓不合法] 回到1C2T,實際上,不可能2T都全線開工,所以,要交替的開工。這個叫content-switch。 如果說賺夠了錢,再來建一座新的樓中樓工廠,就可以2C4T。 如果事業做的夠大,就變成一個大工業園區,就有可能8C16T。 有人會說為什麼不來個1C1000T,不是辦不到,不過也沒這麼多樓中樓。 在SPARC上就實現了8C32T。1C就有4T。 古早的C語言中,會把某些壓縮演算法,分別拆分成可多核運算。 這時候就可以使用多C的好處。 這種拆分是以行程為單位,而不是執行緒。「回想一下當年只有DOS,當年也沒有多T,甚至多C還是由多個單顆單核的CPU組合成多路」 由此往下發展,出現了大型主機及終端系統。 一個行程雖然可以透過演算法拆分給多個單顆單核CPU組成的多路執行,但是這「一個」行程卻要同時提供給「多個」client使用,於是產生出一種在行程內的子行程,也就是現在稱為Thread的東西。 在往下發展,到了PC時代及windows 3.1。 大型系統也發展出了thread這樣的技術,而多個單顆單核CPU組成的多路也進步到了多核。 PC系統在windows 3.1下,也將大型系統的thread移進了作業系統中,就是後來的windows 95。 最早先的windows 95把這樣的thread技術稱為協同式多工。是直接bundle在作業系統中。 但同時期的大型系統早已經把多工行程及執行緒分開設計。 大多數的大型系統的作業系統是允許多個行程[也就是先佔式多工],且每一個行程還可以有多個執行緒。[UNIX,IBM OS/2,BeOS都屬於這類] 以上的問題直到windows 2000及windows xp,才被微軟克服。 如有錯誤,請指正。 |
想了一個不知道是不是恰當的例子
有台機器一次可以列印一張文件、掃描一張文件或複印一張文件(先掃描再列印) 那麼列印一張文件、掃描一張文件或複印一張文件的動作就可視為一個Thread 如果此種機器型號「A」只能一次做一件事(列印時不能掃描(=掃描的資源閒置),反之亦然)就叫1C1T 因為一台機器(=1 Core)同時只能做一件事(=1 Thread) 如果另一台型號「B」在掃描一份文件時同時可以列印另一份文件,這就叫1C2T 因為一台機器(=1 Core)同時可以做兩件事(=2 Thread) 但是在複印時因為資源滿載,所以一台機器不論是型號「A」還是「B」都只能做一件事 類推兩台「A」=2C2T,可以A0列印,A1掃描,一次做兩件事 一台「B」也可以同時列印跟掃描,一次做兩件事 但碰到兩件「複印」任務的話,兩台「A」可以同時完成,但一台「B」就只能 花雙倍時間做兩次「複印」動作 所以2C2T效能能高過1C2T,1C2T又高過1C1T |
執行緒 像是產品製造的工序 第一步進料, 第二步加工 包裝 物流等.
CPU 核心 像是一座工廠 線程數就像是這座工廠對外同時能有幾個工序能同步進行. 為了能同時多個工序進行 每個工序會有相對應的設施 譬如 工序進度表, 工序物料暫存區等. 而同時進行工序數量跟工廠內的生產單元或工序內容有關, 譬如說 過多的對外工序 但沒有足夠多的執行單位, 反而會相對應的資源浪費(為了支援多個工序而產生的相對成本) OS 角色則是統包商 他在有空的資源下同時可以承接非常多的工序並發包 給多間或一間工廠, 為了讓所有承接的工序都能有進度, 會暫停現有工廠的進行中的工序 置換成其他. 這個步驟就叫分時多工. |
通篇看完, 整理一下我這通俗的理解.
先說主題結論, Intel的1C2T, 此Thread跟程式的Thread, 是不一樣的東西. 從OS的角度來看. 譬如說我同時執行著"Google瀏覽器"、"影片播放器", 這兩個稱為"處理程序(process)". 瀏覽器正在同時"下載檔案"跟"玩Flash遊戲" 影片播放器正在播放迷片. 我可以簡單理解為一共4個Thread, 分別為"下載檔案"、"Flash動畫"、"解碼迷片的影像"、"解碼迷片的聲音" 當然應該是不止這4個, 光下載檔案就可以再細分到"網路傳輸"、"硬碟存取"等等... 而由OS不斷將CPU資源快速的切換於這4個Thread中, 好讓我們覺得是"同時"進行. 在CPU資源輪到某的Thread的期間, 應該是拆成很多很多條"指令"(組語)請CPU逐一運算. OS的工作至此. CPU的部分, 硬體上擁有多個不同功能的"暫存器"、多個不同功能的"運算單元". 而執行流程, 譬如運算8+7=15. 暫存器A寫入8 暫存器B寫入+ 暫存器C寫入7 根據暫存器B的值, 來選用"加法運算單元". 並結果值15寫入暫存器D. 而據N大的描述, Intel實作Hyper-Threading的方式. 即是備有兩套暫存器. 以致同時, 我另有暫存器EFGH, 可以使用"乘法運算單元". 一次做了兩個運算, 所以寫作兩個Thread. 這樣稱為1C2T. 以上是我的理解, 應該對吧? :shy: |
所有的時間均為GMT +8。 現在的時間是06:46 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。