面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~

目录

“为什么会有线程(Thread)?”

“谈谈进程与线程的区别?”

1.进程包含线程

2.线程比进程更轻量,创建和销毁的速度都更快

3.同一个进程的多个线程之间共用同一份内存/文件资源,进程与进程之间,则是独立的内存/文件资源

4.进程是资源分配的基本单位,线程是调度执行的基本单位


谈到操作系统,进程线程的概念和区别,就是出场频率最高的面试问题(没有之一)!

首先来看看面试官会如何引出这样一个问题~

“为什么会有线程(Thread)?”

        例如写一个服务器程序,针对每个客户端就可以分别创建一个进程去服务,但是想象一下,如果这里有多个客户端,每个客户端一来都要创建一个进程来服务,客户端一走,就要销毁这个进程,这样一来二去,进程的创建销毁过于频繁,实际上效率是比较低的;来看看进程的创建与销毁有哪些步骤:

        创建进程的步骤:1.创建PCB、2.给进程分配资源(内存/文件),赋值到PCB中、3.把PCB插入链表;

        销毁进程的步骤:1.把PCB从链表中删除、2.把PCB持有资源释放、3.销毁PCB;

        因此聪明的程序员就发明了“线程”;线程也称为“轻量级进程”,因为创建和删除的线程的开销都比进程少~


“谈谈进程与线程的区别?”

1.进程包含线程

        打个比方,如果把进程比作工厂,线程就是工厂中的流水线;

面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~_第1张图片

2.线程比进程更轻量,创建和销毁的速度都更快

        你的工厂做的很好,需要材料的人越来越多,因此你需要加快效率,来看看有两种办法

方法一,再创建一个工厂(再创建一个进程)

面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~_第2张图片

 方法二,再创建一个流水线(再创建一个线程)

面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~_第3张图片

你会怎么选择呢?当然是创建一个流水线了~

3.同一个进程的多个线程之间共用同一份内存/文件资源,进程与进程之间,则是独立的内存/文件资源

         打个比方,现在有个需求,你在这个餐厅里需要把100只鸡吃了

面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~_第4张图片

        当然你一个人肯定是吃不完,因此还需要叫上很多人一起(多线程)

面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~_第5张图片

         这个时候你们这些人(多线程)就是在同一个房间里吃鸡(同一个进程的多个线程共用一块空间);

        但同时这么做,会有一定的问题,当一个桌子周围围满了人,多出来的人就吃不上了,而且吃不上不说,房间越来越拥挤,还影响中间吃饭的人;

        因此类比一下,线程也并不是越多越好,也会又吃满的时候,并且一旦过多,反而会影响效率(CPU的核心数是有限的,线程数量达到一定程度便会吃满,并且会因为线程太多,所以线程调度开销太大,影响效率);

        如下图:

面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~_第6张图片

         继续上图,多个人一起,也会不安全,如果又两个人看上了同一个鸡腿,都去伸手去拿,于是两个人就抢起来了;也就是说,多线程有可能会引发线程安全,例如两个线程同时修改同一个变量,也容易产生线程不安全问题;

        大家都在吃,突然有一个滑稽边吃边抠脚,另一个滑稽就不高兴了,直接掀桌,因此,其他人也就吃不成了如果某个线程发生意外,执行过程出现异常,并且这个异常没有处理好的话,整个进程都会随之崩溃,这时,其他线程自然就无法运行了;

那么有人就想,让每个人都分开吃吧~(多进程)如下图

面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~_第7张图片

 此时,自然有他的优势,优势就是两个滑稽之间互不干扰了,但劣势也很明显,就是效率太低,开销太大

4.进程是资源分配的基本单位,线程是调度执行的基本单位

        如果了解了以上三点,这点理解十分简单了


面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~_第8张图片

 

你可能感兴趣的:(面试,进程,线程,多线程,多进程)