精華區beta CSSE 關於我們 聯絡資訊
※ 引述《cipherman (雨云無日晴)》之銘言: : ※ 引述《tcmbug (bug)》之銘言: : : 初次接觸到 multithread 的paper,但是對於裡面提到的thread : : 不是很了解,之前得到一位學長的答案是:"一個process正在被處理的一段code" : : 想請問有沒有更明確的定義,比如說,一個程式如何區分出thread?? : Thread和Process的差別可以用個具體的譬喻來說... : 就是像pcman和firefox那樣...每個分頁都是一個thread... : 若是要開一個新頁就要另外開一個新的視窗就是新開一個process... : 所以說,thread和process主要的差別在要執行的動作一樣... : thread則不再另外allocate一個space放要執行的code.... 這樣子的說法其實會有爭議, 因為 copy on write的技術 (我猜應該許多作業系統都有做了) , 一個 process進行 fork(2)的時候, 當下 code (以及其他大部份的東西) 並不會被弄成兩份, 而 code space 在大部份的情況下又是 read only的, 所以理論上不管你 fork 幾次都還是會只有一份. 我倒比較好奇的是, 如果我故意跑兩隻一樣的程式, 而不是先跑一隻起來再讓他 fork, 醬子在記憶體中, code會變兩份嗎? 或是只有一份? 個人猜測應該是前者比較合理, 後者的話似乎有點實作上的困難 @@ 要怎麼知道新跑起來的這個程式是不是和其中一個已經在跑的程式一樣呢? :Q -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.90.74
hardcover:open file table + shared page 應該可以。猜的 XD 01/24 01:29
UNARYvvv:如果在 Windows 上,透過 file mapping 應該是一份吧 01/24 02:16
UNARYvvv:就像 DLL 一樣 01/24 02:17
UNARYvvv:而一般 process 的 code space 內容也是把 EXE 檔內容利 01/24 02:17
UNARYvvv:用 file mapping 方式對應到 process address space 中 01/24 02:19
UNARYvvv:所以應該是共用的狀態 01/24 02:19
UNARYvvv:反正改了還是有 copy on write 不會影響到其他 process 01/24 02:20
HZYSoft:Windows 上是一份 01/24 07:58
HZYSoft:Win32 code 是一份 data 則是很多份 (我猜應該也有 COW) 01/24 07:58
cipherman:其實我猜想是"早期"才有這些分別吧.... 01/24 19:39
cipherman:就是thread的概念剛提出時,為和傳統process做區別 01/24 19:39
cipherman:而現在可能就沒有很大的區別了... 01/24 19:40
edwar:如果不同 user 跑同一個程式也是一份嗎? 01/24 22:16
jeunder:最簡單的分法, thread 之間共享 memory context... 01/24 22:27
jeunder:process 之間則是獨立空間, 因此必須利用 share memory 01/24 22:29
jeunder:才能分享資料... (不知道這樣的定義是不是已經過時了 @,@? 01/24 22:30
gwliao:memory context? Address space會不會比較好一點. 01/25 02:24
Tiberius:address space 沒有涵蓋到 protection 之類的概念吧 01/25 12:11
gwliao:沒有protection就沒辦法區分thread和process的差別嗎? 01/25 12:40