面试官(正襟危坐中):给我说说“线程”与“进程”吧。
我:“限乘?”、“进什么城(程)?”
面试官:“操作系统中的进程与线程,你回去了解一下。门在左边,记得关门。”
当翻译过来后,这两个概念都带了个“程”字,但进程的英文:Process,而线程的英文:Thread,好像并没有什么联系。
大多数初学者一开始都会被这两个概念弄的晕头转向,包括我本人。
当你看完这篇文章,可能你就有了新的理解。
不信,你接着往下看看(不过在这之前,点个赞或关注好不好?)。
看了下面的定义,可能会有点晕,但我还是要把他写下来(为了严谨)。
进程是资源(CPU、内存等)分配的基本单位,具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体,是独立运行和独立调度的基本单位(CPU上真正运行的是线程)。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
正是因为这二者有区别,所以带来的各自的优劣
除此之外,推荐看一下阮一峰的一篇博客:进程与线程的一个简单解释,用图解释十分生动形象。
既然这个问题是面试当中会被经常问到的,所以我去网上找一个答案,背出来不就好了。
但是,真的背答案就可以了吗?
我们来分析一下为什么众多面试官老是问这个问题,他应该并不是想听到一个对书本上概念的重复。
那么,他究竟想考什么?
比如:
如何作答,才能展示一个让面试官更满意的答案?
这里就不得不用张三丰教给张无忌的太极拳的那一招——忘掉。。。
对就是把上面的概念全都忘掉。只留一个目的:“把敌人打败”。
最后用自己的一招一式(理解)来回答。
进程的本质::正在执行的一个程序,可以进程比作一个容器或者工厂
通过上图,方便我们了解并记忆:
进程与进程之间相对独立
进程可以包括几个或者上百个线程在运行。
内存(逻辑内存)包括在进程里面,每个进程的内存都是互相独立的,但从一个更高的层次上看,不同的进程也共享着一个巨大的空间,这个空间就是整个计算机。
进程共有文件/网络句柄(handle),这样可以打开同一个文件,抢同一个网络端口。
从不同的视角来看进程:
线程的本质:真正运行的是一个一个的线程
同理,上图我们知道线程包含:
栈(堆栈):主线程的main函数、进行函数调用的参数和返回地址、局部变量等内容都会被压入栈内
PC(Program Couner):程序计数器,PC的指针指向代码所在的内存地址。
TLS(Thread local storage):分配内存,存放变量
当有了上面的问题做引子后,面试官就可以借此引出更多话题:
通信是人的基本需求,进程与进程之间是相互独立的,也有通信需求。根据这一问题就可以展开内容提问:
一旦有了通信,进程就会产生矛盾。这些矛盾就会体现在如何同步上。
进程要分配内存,所以开销很大,进程只需要分配栈,分配一个PC就好,内存开销小。
这一块就可以问到了操作系统中的内存原理相关的内容。
总之,如果上述内容你都了解,那肯定是不怕被问到(大佬,请收下我的膝盖);如果看了此篇文章之后,你能答出个大概,我相信面试官也会放过你,毕竟,我们也真的不是背书机器。
如果你能看到这,能否给我点个关注,点个赞让我也收到鼓励。如果觉得我写的内容有误,也欢迎评论指出。
注意,要敲黑板啦。
最后,祝大家答的愉快!面试过!过!过!
参考资料:
- 《现代操作系统(第3版)》
- 《操作系统之哲学原理(第2版)》
为什么校招面试中“线程与进程的区别”老是被问到?我该如何回答?
原文:https://www.cnblogs.com/yuzhou-1su/p/12638362.html