看板 Soft_Job 關於我們 聯絡資訊
某B是小弟的朋友,最近正在求職找資深工程師的職位(目標月薪50K)。不過其求 職過程不甚順遂,面試常被慘電。上次面試他被慘電的題目之一是被詢問Process 與Thread的差異,小弟指引他被電過的題目要搞懂。過了幾天後有了以下的對話: A: 上次的Process 和 Thread搞懂了嗎? B: 搞懂了 A: 說說看 我幫你打個分數 先一百字以內 把你所知塞進一百字以內 ......四分鐘後...... B: Process:已經被LOAD到記憶體中準備執行的code, 一個多工的作業系統可以同時運行多個process,但CPU一次只能執行一件事 因此每個process需要排程; 在同一個preocess下有許多分身就是Thread,而 Thread共享process的資源,可以存取同一個Process的Gobal變數,而每一個 Thread可能互搶資源造成Deadlock A: 哈哈,這不是網路上的解釋嘛 ......離題討論到CPU Pipeline stage 中略...... B: 我的映像中老師是說 process是要去偷時間插入clock中 A: 你能具體地告訴我 你寫過的程式中,那些是Process 那些是Thread嗎? B: 譬如說一個小算盤叫process 他的加減乘除工能就是Thread A: 你或許能從網路上找到不錯的解釋應付過去第一層的問題 B: 但是只要一問下去 就嚴重暴露了你實際上沒有懂得內含了 A: 小算盤的例子為何你會認為加減乘除是寫成Thread呢? 如果我再問你 甚麼時候你會寫成Thread,考量的點是什麼? 甚麼時候你會寫成Process? B: 我剛舉的例子有問題 我再舉一個來回答你的問題好了 用網路遊戲打怪來作利子 如果用process來設計 會變成搶怪的人得不到任何經驗值 也無法組隊打怪 如果是Thread的話 就可以作到可以共享經驗 一起打怪 然後經驗值根據打怪的 輸出不同來分配 最後這分數我始終沒有打下去,不知道版上的大大有沒有什們辦法可以幫助小弟 的朋友搞清楚觀念啊。他舉的例子我實在聽不懂,幫不上忙。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.161.70.177 ※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1406625146.A.971.html
NDark:code是炮操手冊 cpu是兵 process是跳完砲操 thread是砲管數 07/29 17:25
lNishan:B: 但是只要一問下去 --> 這行主詞有誤 XD 07/29 17:26
xsion:一樓的比喻當過砲兵的應該會懂 XD 07/29 17:27
loveflames:用virtual address space來解釋就很很直觀啦 07/29 17:27
damody:不要講那麼多譬喻,他感覺就是直接恐龍本K下去就懂的感覺 07/29 18:12
xsion:他的問題在於他認為他懂了 如果我沒問他也不會再去學的感覺 07/29 18:13
xsion:而且這些基礎知識三年前就叫他看了 07/29 18:15
final01:你幹嘛幫他??等他碰到問題再說吧...說再多定義跟幾百字 07/29 18:15
xsion:因為最近他在面試 很可能再被問 07/29 18:16
final01:字描述都是嘴砲吧... 07/29 18:16
xsion:朋友一場盡量幫啊 放他去死我就不用來問了咩 07/29 18:16
damody:http://ppt.cc/CIHc 跟他講解13~16題吧。 07/29 18:24
xsion:感謝樓上 我給他做做看 07/29 18:28
whale76109:"小算盤叫process 他的加減乘除功能就是thread" … 難 07/29 18:46
whale76109:怪你朋友會被慘電 07/29 18:46
cha122977:被電過同一題O_Q 07/29 18:55
lovdkkkk:各個 Process 共享 CPU/Memory 的資源 07/29 19:37
lovdkkkk:然後 Thread 共享 Process 的資源 基本上就這樣 07/29 19:38
lovdkkkk:實際上要不要讓你開多個 Thread 還是看系統實作 07/29 19:39
lovdkkkk:*Thread 共享 -> 同一個 Process 下的 Threads 共享 07/29 19:40
onear:google第一個的解答就蠻好的了.. 07/29 19:45
leoace:可能會被問到fork跟thread的差別 07/29 19:53
hidog:請他去準備資工所的考試 準備完應該就都會了吧 07/29 20:05
hidog:另外好奇問 怎樣的工作會考這個阿 通常都是會用為主吧@@ 07/29 20:05
abcdefghi:考試的目的只是為了分數? 還是為了瞭解真正的實力? 07/29 20:48
abcdefghi:你幫他補習考題, 就算通過面試, 勉強拿到職缺, 可能也只 07/29 20:51
banjmin:Thread分配cpu time對象單位 Process分配resource對象單位 07/29 20:51
abcdefghi:是天天被刮而已, 還不如先請他找份簡單的工作, 然後把這 07/29 20:52
abcdefghi:些CS基本觀念搞清楚. 07/29 20:52
Jockey66666:這樣要找senior當然會不順啊..因為junior就會被問了 07/29 20:57
banjmin:都是考研所必背題 07/29 20:58
xsion:面試問這題其實比考研究所難 研究所只要背一下就拿分了 面 07/29 21:24
xsion:試可以繼續追問下去 不真正理解的話 一問就倒 07/29 21:24
loveflames:一件工作需要多工且每個子工作之間需要經常互動,則用t 07/29 21:38
loveflames:hread,互動性太低則用process 07/29 21:38
loveflames:簡單講就是thread之間溝通容易(但容易碰到同步的問題) 07/29 21:41
loveflames:,而process之間溝通較麻煩 07/29 21:41
YishengSu:自己寫一個可上架的APP就打通了 07/29 21:49
loveflames:寫socket server也可以 07/29 21:56
abcdefghi:既然他都舉小算盤為例了, 就讓他真的寫個小算盤, 然後 07/29 22:03
abcdefghi:真的把加減乘除放到不同的thread.... 07/29 22:04
loveflames:不然也能用linux的存取權限來區分 07/29 22:07
AzureCoder:不懂這個,大學OS那門科到底是怎過的.. 07/29 22:10
Ting1024:大學OS隨便背一背就過了。 07/29 22:38
Ting1024:跟企管的課本差不多。 07/29 22:38
feeya:Process就是一間房子 Thread是一間廁所 07/29 23:12
uid88:比較有興趣知道原PO自己懂不懂 07/29 23:12
feeya:如果只有一個Thread 那兩個人拉肚子時就得鬧革命了 07/29 23:13
typepeter:嗯...我覺得應該要好好學習 這很基本 又要"資深"必定會. 07/30 00:07
forgmonkey:大大辛苦了,你確定不勸他不找senior,有點誇張捏? 07/30 00:18
forgmonkey:其實我覺得他學習方法有問題,他很像想用背的去學習 07/30 00:20
xsion:其實面試問基本題很常見 像OO三大要素之類的 工作有熟悉過 07/30 02:18
xsion:的人回答起來和學生時代制式被課本的答案是很好分辨的 用來 07/30 02:18
xsion:當面試的開場也不錯 07/30 02:18
xsion:feeya大你那廁所的比喻快笑死我了啦 Thread是輕量化的proces 07/30 02:21
xsion:s 廁所還真可以說是簡化的房子咧 07/30 02:21
afafaf:.net 還有 Task喔 07/30 12:51
oicfck:Process=Task 是個實際的程式 需要在compiler load到記憶體 07/31 12:14
oicfck:有各自的記憶體空間 就像一物件或Class 07/31 12:15
oicfck:Thread 包含在process底下,共用同一組process資源 07/31 12:16
oicfck:可以多工 但要做些保護才能達成同步且不會死結 07/31 12:18
oicfck:以小算盤來說 +-x/ 小算盤主程式是個Process 有輸入及輸出 07/31 12:21
oicfck:UserA和UserB 可以用不同的Thread 執行同時得到所需的結果 07/31 12:22
oicfck:例如 UserA 要算1+2 而UserB 要算2*3 則需要用Mutex去控制 07/31 12:23
oicfck:算UserA時 需等到結果出來 再算UserB 以防輸入和輸出混亂 07/31 12:24
oicfck:優點是 同步多工 省時間 而且在多核心環境下 可以平行運算 07/31 12:25
trovadores:丟給他一本恐龍本 08/04 18:50