面试必问:进程与线程的异同以及进程间通信方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_21107433/article/details/82809946

秋招面试必问的题目,感觉今年被问了差不多10次了。

1.进程与线程

进程:具有独立功能的程序关于某个数据集合上的一次运行活动。
线程:进程的一个实体。
比喻:一列火车是一个进程,火车的每一节车厢是线程。

2.进程与线程的联系

①一个线程只能属于一个进程,一个进程可以有多个线程;
②系统资源分配给进程,同一进程的所有线程共享该进程的所有资源;
③真正在处理机上运行的是线程;
④不同进程的线程间利用消息通信的方式实现同步。

3.进程与线程的区别

①调度:线程是系统调度和分配的基本单位,进程是作为拥有系统资源的基本单位;
②并发性:进程之间可以并发执行,同一进程的多个线程时间亦可以并发执行;
③拥有资源:进程是拥有资源的独立单位,线程不拥有资源,但可以访问隶属于进程的资源;
④系统开销:创建和撤销进程的开销更大;进程拥有独立的地址空间,一个进程的崩溃不会影响其他进程;线程拥有自己的堆栈和局部变量,没有独立的地址空间,因此进程里的一个线程崩溃会导致其他线程均崩溃。

4.进程间通信方式

进程间通信方式有很多,网上一说有十几种。面试的时候说上以下几种差不多:
①管道:半双工的通信方式,数据只能单向流动,且只能在有亲缘关系(父子进程或兄弟进程)的进程间使用;
②命名管道:FIFO,半双工的通信方式,但允许在无亲缘关系的进程间通信;
③消息队列:消息的链表,存放在内核中,并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点;
④信号量:是一个计数器,用于控制多个进程间对共享资源的访问;
⑤共享内存:映射一段能被其他进程访问的内存,这段内存由一个进程创建,但多个进程都可以访问;
⑥套接字

5.线程间通信方式

多个线程在处理同一个资源,并且任务不同时,需要线程通信来帮助解决线程之间对同一个变量的使用或操作。就是多个线程在操作同一份数据时, 避免对同一共享变量的争夺。
①锁机制:包括互斥锁、条件变量、读写锁

  • 互斥锁提供了以排他方式防止数据结构被并发修改的方法。
  • 读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
  • 条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

②信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
③信号机制(Signal):类似进程间的信号处理
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

猜你喜欢

转载自blog.csdn.net/sinat_21107433/article/details/82809946