某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的话 就可以作到可以共享经验 一起打怪 然后经验值根据打怪的
输出不同来分配
最后这分数我始终没有打下去,不知道版上的大大有没有什们办法可以帮助小弟
的朋友搞清楚观念啊。他举的例子我实在听不懂,帮不上忙。