[請益] 要如何讓人搞懂Process與Thread

作者: xsion (Xsion)   2014-07-29 17:12:23
某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的話 就可以作到可以共享經驗 一起打怪 然後經驗值根據打怪的
輸出不同來分配
最後這分數我始終沒有打下去,不知道版上的大大有沒有什們辦法可以幫助小弟
的朋友搞清楚觀念啊。他舉的例子我實在聽不懂,幫不上忙。
作者: NDark (溺於黑暗)   2014-07-29 17:25:00
code是炮操手冊 cpu是兵 process是跳完砲操 thread是砲管數
作者: lNishan (紫小霓)   2014-07-29 17:26:00
B: 但是只要一問下去 --> 這行主詞有誤 XD
作者: xsion (Xsion)   2014-07-29 17:27:00
一樓的比喻當過砲兵的應該會懂 XD
作者: loveflames (咕啾咕啾魔法陣)   2014-07-29 17:27:00
用virtual address space來解釋就很很直觀啦
作者: damody (天亮damody)   2014-07-29 18:12:00
不要講那麼多譬喻,他感覺就是直接恐龍本K下去就懂的感覺
作者: xsion (Xsion)   2014-07-29 18:13:00
他的問題在於他認為他懂了 如果我沒問他也不會再去學的感覺而且這些基礎知識三年前就叫他看了
作者: final01 (牛頓運動定律)   2014-07-29 18:15:00
你幹嘛幫他??等他碰到問題再說吧...說再多定義跟幾百字
作者: xsion (Xsion)   2014-07-29 18:16:00
因為最近他在面試 很可能再被問
作者: final01 (牛頓運動定律)   2014-07-29 18:16:00
字描述都是嘴砲吧...
作者: damody (天亮damody)   2014-07-29 18:24:00
http://ppt.cc/CIHc 跟他講解13~16題吧。
作者: xsion (Xsion)   2014-07-29 18:28:00
感謝樓上 我給他做做看
作者: whale76109 (傑)   2014-07-29 18:46:00
"小算盤叫process 他的加減乘除功能就是thread" … 難怪你朋友會被慘電
作者: cha122977 (CHA)   2014-07-29 18:55:00
被電過同一題O_Q
作者: lovdkkkk (dk)   2014-07-29 19:37:00
各個 Process 共享 CPU/Memory 的資源然後 Thread 共享 Process 的資源 基本上就這樣實際上要不要讓你開多個 Thread 還是看系統實作*Thread 共享 -> 同一個 Process 下的 Threads 共享
作者: onear (萬一)   2014-07-29 19:45:00
http://programming.im.ncnu.edu.tw/J_Chapter9.htmgoogle第一個的解答就蠻好的了..
作者: leoace (leoace)   2014-07-29 19:53:00
可能會被問到fork跟thread的差別
作者: hidog (.....)   2014-07-29 20:05:00
請他去準備資工所的考試 準備完應該就都會了吧另外好奇問 怎樣的工作會考這個阿 通常都是會用為主吧@@
作者: abcdefghi   2014-07-29 20:48:00
考試的目的只是為了分數? 還是為了瞭解真正的實力?你幫他補習考題, 就算通過面試, 勉強拿到職缺, 可能也只
作者: banjmin (HD)   2014-07-29 20:51:00
Thread分配cpu time對象單位 Process分配resource對象單位
作者: abcdefghi   2014-07-29 20:52:00
是天天被刮而已, 還不如先請他找份簡單的工作, 然後把這些CS基本觀念搞清楚.
作者: Jockey66666 (往事已成追憶)   2014-07-29 20:57:00
這樣要找senior當然會不順啊..因為junior就會被問了
作者: banjmin (HD)   2014-07-29 20:58:00
都是考研所必背題
作者: xsion (Xsion)   2014-07-29 21:24:00
面試問這題其實比考研究所難 研究所只要背一下就拿分了 面試可以繼續追問下去 不真正理解的話 一問就倒
作者: loveflames (咕啾咕啾魔法陣)   2014-07-29 21:38:00
一件工作需要多工且每個子工作之間需要經常互動,則用thread,互動性太低則用process簡單講就是thread之間溝通容易(但容易碰到同步的問題),而process之間溝通較麻煩
作者: YishengSu (快樂的多多)   2014-07-29 21:49:00
自己寫一個可上架的APP就打通了
作者: loveflames (咕啾咕啾魔法陣)   2014-07-29 21:56:00
寫socket server也可以
作者: abcdefghi   2014-07-29 22:03:00
既然他都舉小算盤為例了, 就讓他真的寫個小算盤, 然後真的把加減乘除放到不同的thread....
作者: loveflames (咕啾咕啾魔法陣)   2014-07-29 22:07:00
不然也能用linux的存取權限來區分
作者: AzureCoder (AzureCoder)   2014-07-29 22:10:00
不懂這個,大學OS那門科到底是怎過的..
作者: Ting1024 (無)   2014-07-29 22:38:00
大學OS隨便背一背就過了。跟企管的課本差不多。
作者: feeya (24 August 升格為鄉民)   2014-07-29 23:12:00
Process就是一間房子 Thread是一間廁所
作者: uid88 (uid88)   2014-07-29 23:12:00
比較有興趣知道原PO自己懂不懂
作者: feeya (24 August 升格為鄉民)   2014-07-29 23:13:00
如果只有一個Thread 那兩個人拉肚子時就得鬧革命了
作者: typepeter (∵Peter∴笑點)   2014-07-30 00:07:00
嗯...我覺得應該要好好學習 這很基本 又要"資深"必定會.
作者: forgmonkey (悲情城市之悲情程式猿)   2014-07-30 00:18:00
大大辛苦了,你確定不勸他不找senior,有點誇張捏?其實我覺得他學習方法有問題,他很像想用背的去學習
作者: xsion (Xsion)   2014-07-30 02:18:00
其實面試問基本題很常見 像OO三大要素之類的 工作有熟悉過的人回答起來和學生時代制式被課本的答案是很好分辨的 用來當面試的開場也不錯feeya大你那廁所的比喻快笑死我了啦 Thread是輕量化的process 廁所還真可以說是簡化的房子咧
作者: afafaf (bb)   2014-07-30 12:51:00
.net 還有 Task喔
作者: oicfck (LTEMAN)   2014-07-31 12:14:00
Process=Task 是個實際的程式 需要在compiler load到記憶體有各自的記憶體空間 就像一物件或ClassThread 包含在process底下,共用同一組process資源可以多工 但要做些保護才能達成同步且不會死結以小算盤來說 +-x/ 小算盤主程式是個Process 有輸入及輸出UserA和UserB 可以用不同的Thread 執行同時得到所需的結果例如 UserA 要算1+2 而UserB 要算2*3 則需要用Mutex去控制算UserA時 需等到結果出來 再算UserB 以防輸入和輸出混亂優點是 同步多工 省時間 而且在多核心環境下 可以平行運算
作者: trovadores (吟遊詩人)   2014-08-04 18:50:00
丟給他一本恐龍本

Links booklink

Contact Us: admin [ a t ] ucptt.com