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

看板Soft_Job (軟體人)作者 (Xsion)時間11年前 (2014/07/29 17:12), 編輯推噓22(22046)
留言68則, 25人參與, 最新討論串1/2 (看更多)
某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

07/29 17:25, , 1F
code是炮操手冊 cpu是兵 process是跳完砲操 thread是砲管數
07/29 17:25, 1F

07/29 17:26, , 2F
B: 但是只要一問下去 --> 這行主詞有誤 XD
07/29 17:26, 2F

07/29 17:27, , 3F
一樓的比喻當過砲兵的應該會懂 XD
07/29 17:27, 3F

07/29 17:27, , 4F
用virtual address space來解釋就很很直觀啦
07/29 17:27, 4F

07/29 18:12, , 5F
不要講那麼多譬喻,他感覺就是直接恐龍本K下去就懂的感覺
07/29 18:12, 5F

07/29 18:13, , 6F
他的問題在於他認為他懂了 如果我沒問他也不會再去學的感覺
07/29 18:13, 6F

07/29 18:15, , 7F
而且這些基礎知識三年前就叫他看了
07/29 18:15, 7F

07/29 18:15, , 8F
你幹嘛幫他??等他碰到問題再說吧...說再多定義跟幾百字
07/29 18:15, 8F

07/29 18:16, , 9F
因為最近他在面試 很可能再被問
07/29 18:16, 9F

07/29 18:16, , 10F
字描述都是嘴砲吧...
07/29 18:16, 10F

07/29 18:16, , 11F
朋友一場盡量幫啊 放他去死我就不用來問了咩
07/29 18:16, 11F

07/29 18:24, , 12F
http://ppt.cc/CIHc 跟他講解13~16題吧。
07/29 18:24, 12F

07/29 18:28, , 13F
感謝樓上 我給他做做看
07/29 18:28, 13F

07/29 18:46, , 14F
"小算盤叫process 他的加減乘除功能就是thread" … 難
07/29 18:46, 14F

07/29 18:46, , 15F
怪你朋友會被慘電
07/29 18:46, 15F

07/29 18:55, , 16F
被電過同一題O_Q
07/29 18:55, 16F

07/29 19:37, , 17F
各個 Process 共享 CPU/Memory 的資源
07/29 19:37, 17F

07/29 19:38, , 18F
然後 Thread 共享 Process 的資源 基本上就這樣
07/29 19:38, 18F

07/29 19:39, , 19F
實際上要不要讓你開多個 Thread 還是看系統實作
07/29 19:39, 19F

07/29 19:40, , 20F
*Thread 共享 -> 同一個 Process 下的 Threads 共享
07/29 19:40, 20F


07/29 19:45, , 22F
google第一個的解答就蠻好的了..
07/29 19:45, 22F

07/29 19:53, , 23F
可能會被問到fork跟thread的差別
07/29 19:53, 23F

07/29 20:05, , 24F
請他去準備資工所的考試 準備完應該就都會了吧
07/29 20:05, 24F

07/29 20:05, , 25F
另外好奇問 怎樣的工作會考這個阿 通常都是會用為主吧@@
07/29 20:05, 25F

07/29 20:48, , 26F
考試的目的只是為了分數? 還是為了瞭解真正的實力?
07/29 20:48, 26F

07/29 20:51, , 27F
你幫他補習考題, 就算通過面試, 勉強拿到職缺, 可能也只
07/29 20:51, 27F

07/29 20:51, , 28F
Thread分配cpu time對象單位 Process分配resource對象單位
07/29 20:51, 28F

07/29 20:52, , 29F
是天天被刮而已, 還不如先請他找份簡單的工作, 然後把這
07/29 20:52, 29F

07/29 20:52, , 30F
些CS基本觀念搞清楚.
07/29 20:52, 30F

07/29 20:57, , 31F
這樣要找senior當然會不順啊..因為junior就會被問了
07/29 20:57, 31F

07/29 20:58, , 32F
都是考研所必背題
07/29 20:58, 32F

07/29 21:24, , 33F
面試問這題其實比考研究所難 研究所只要背一下就拿分了 面
07/29 21:24, 33F

07/29 21:24, , 34F
試可以繼續追問下去 不真正理解的話 一問就倒
07/29 21:24, 34F

07/29 21:38, , 35F
一件工作需要多工且每個子工作之間需要經常互動,則用t
07/29 21:38, 35F

07/29 21:38, , 36F
hread,互動性太低則用process
07/29 21:38, 36F

07/29 21:41, , 37F
簡單講就是thread之間溝通容易(但容易碰到同步的問題)
07/29 21:41, 37F

07/29 21:41, , 38F
,而process之間溝通較麻煩
07/29 21:41, 38F

07/29 21:49, , 39F
自己寫一個可上架的APP就打通了
07/29 21:49, 39F

07/29 21:56, , 40F
寫socket server也可以
07/29 21:56, 40F

07/29 22:03, , 41F
既然他都舉小算盤為例了, 就讓他真的寫個小算盤, 然後
07/29 22:03, 41F

07/29 22:04, , 42F
真的把加減乘除放到不同的thread....
07/29 22:04, 42F

07/29 22:07, , 43F
不然也能用linux的存取權限來區分
07/29 22:07, 43F

07/29 22:10, , 44F
不懂這個,大學OS那門科到底是怎過的..
07/29 22:10, 44F

07/29 22:38, , 45F
大學OS隨便背一背就過了。
07/29 22:38, 45F

07/29 22:38, , 46F
跟企管的課本差不多。
07/29 22:38, 46F

07/29 23:12, , 47F
Process就是一間房子 Thread是一間廁所
07/29 23:12, 47F

07/29 23:12, , 48F
比較有興趣知道原PO自己懂不懂
07/29 23:12, 48F

07/29 23:13, , 49F
如果只有一個Thread 那兩個人拉肚子時就得鬧革命了
07/29 23:13, 49F

07/30 00:07, , 50F
嗯...我覺得應該要好好學習 這很基本 又要"資深"必定會.
07/30 00:07, 50F

07/30 00:18, , 51F
大大辛苦了,你確定不勸他不找senior,有點誇張捏?
07/30 00:18, 51F

07/30 00:20, , 52F
其實我覺得他學習方法有問題,他很像想用背的去學習
07/30 00:20, 52F

07/30 02:18, , 53F
其實面試問基本題很常見 像OO三大要素之類的 工作有熟悉過
07/30 02:18, 53F

07/30 02:18, , 54F
的人回答起來和學生時代制式被課本的答案是很好分辨的 用來
07/30 02:18, 54F

07/30 02:18, , 55F
當面試的開場也不錯
07/30 02:18, 55F

07/30 02:21, , 56F
feeya大你那廁所的比喻快笑死我了啦 Thread是輕量化的proces
07/30 02:21, 56F

07/30 02:21, , 57F
s 廁所還真可以說是簡化的房子咧
07/30 02:21, 57F

07/30 12:51, , 58F
.net 還有 Task喔
07/30 12:51, 58F

07/31 12:14, , 59F
Process=Task 是個實際的程式 需要在compiler load到記憶體
07/31 12:14, 59F

07/31 12:15, , 60F
有各自的記憶體空間 就像一物件或Class
07/31 12:15, 60F

07/31 12:16, , 61F
Thread 包含在process底下,共用同一組process資源
07/31 12:16, 61F

07/31 12:18, , 62F
可以多工 但要做些保護才能達成同步且不會死結
07/31 12:18, 62F

07/31 12:21, , 63F
以小算盤來說 +-x/ 小算盤主程式是個Process 有輸入及輸出
07/31 12:21, 63F

07/31 12:22, , 64F
UserA和UserB 可以用不同的Thread 執行同時得到所需的結果
07/31 12:22, 64F

07/31 12:23, , 65F
例如 UserA 要算1+2 而UserB 要算2*3 則需要用Mutex去控制
07/31 12:23, 65F

07/31 12:24, , 66F
算UserA時 需等到結果出來 再算UserB 以防輸入和輸出混亂
07/31 12:24, 66F

07/31 12:25, , 67F
優點是 同步多工 省時間 而且在多核心環境下 可以平行運算
07/31 12:25, 67F

08/04 18:50, , 68F
丟給他一本恐龍本
08/04 18:50, 68F
文章代碼(AID): #1JrsLwbn (Soft_Job)
文章代碼(AID): #1JrsLwbn (Soft_Job)