作者xsion (Xsion)
看板Soft_Job
標題[請益] 要如何讓人搞懂Process與Thread
時間Tue Jul 29 17:12:23 2014
某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
→ 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