某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的話 就可以作到可以共享經驗 一起打怪 然後經驗值根據打怪的
輸出不同來分配
最後這分數我始終沒有打下去,不知道版上的大大有沒有什們辦法可以幫助小弟
的朋友搞清楚觀念啊。他舉的例子我實在聽不懂,幫不上忙。