20250115面试鸭特训营第23天
更多特训营笔记详见个人主页【面试鸭特训营】专栏
250115
1. 线程和进程有什么区别?
属性 | 进程 | 线程 |
---|---|---|
定义 | 进程是操作系统进行资源分配和调度的最小独立单位,是应用程序运行的实例,是一个动态的实体。 | CPU 调度的基本单位,属于进程,一个进程中可以包含多个线程。 |
空间 | 具有独立的内存空间和资源。 | 每个线程有自己独立的栈和寄存器。 |
资源分配 | 拥有独立的资源,如内存、文件描述符等。 | 同一进程中的多个线程共享内存和资源。 |
开销 | 创建、销毁和切换进程的开销较大。进程上下文切换需要保存和恢复更多的信息,开销较大。 | 创建和销毁线程的开销较小,线程切换的开销远小于进程切换。线程上下文切换只需保存少量信息,开销较小。 |
通信方式 | 由于每个进程都有属于自己的地址空间,进程间通信需要使用IPC(管道、消息队列、共享内存等)。 | 同一进程内线程共享内存空间,内存共享,线程可以直接读写内存,但可能竞争资源,注意避免同步机制导致的数据错误。 |
2. 进程之间的通信方式有哪些?
-
管道:单向通信方式,用于在
父进程和子进程之间
或同一主机上的不同进程
之间传递数据。- 匿名管道
- 特点:单向通信,数据从一端写入,另一端读取,且只能在具有亲缘关系的进程(如父子进程、兄弟进程)之间使用。
- 优点:实现简单,开销小。
- 缺点:通信方向单一,数据只能以流的形式进行传递。
- 命名管道
- 特点:双向通信,不强制进程间有亲缘关系,是一种存在于文件系统中的特殊文件,通过管道名称可以进行读写操作。
- 优点:适用于在无关系的进程间进行通信。
- 缺点:需要创建命名文件,使用不如匿名管道方便。
- 匿名管道
-
消息队列:消息队列允许一个进程向另一个进程发送消息,消息在队列中按顺序存储,并且接收方可以按需接收。
- 特点:通过消息队列在进程间传递消息,允许一对多或多对多通信。
- 优点:数据有结构化,支持优先级,且消息不需要实时消费,可暂存于队列。
- 缺点:队列容量有限,可能造成阻塞,且实现稍复杂,需要额外管理队列。
-
共享内存:共享内存允许多个进程访问同一块内存区域,从而实现快速的数据交换。但需要注意同步问题,以避免竞态条件和数据一致性问题。
-
特点:多个进程可以访问同一块内存区域来交换数据。
-
优点: 通信效率最高,数据直接读写无需复制,且适合频繁、大量数据的通信。
-
缺点: 需要额外的同步机制(如信号量)来避免竞争和数据不一致。
-
共享内存虽然能提供最快速的通信方式, 但存在并发读写的问题,需要使用同步机制来控制
- 信号量:用于对共享内存进行访问控制,防止多个进程同时读写时出现数据不一致。
- 互斥锁和读写锁:用于解决多线程对共享资源的互斥访问问题,互斥锁确保只有一个进程可以访问共享资源,读写锁则允许多个进程进行读操作,但在写操作时需要排他锁。
-
-
信号量:信号量是一种同步原语,用于管理对共享资源的访问,它可以用于实现进程间的互斥访问和同步操作。
- 特点:主要用于进程间的同步,而非大量数据传递。
- 优点: 能有效解决临界区问题。
- 缺点: 不适合复杂的数据交换,仅限于控制同步。
-
信号:信号是一种异步通信方式,用于通知目标进程发生了某个事件。信号常用于进程之间发送中断或终止指令。
-
特点:用于通知进程某些事件的发生。
-
优点: 简单高效,适用于轻量级事件通知。
-
缺点: 信号携带的信息有限,通常只能通知特定事件。
-
-
信号是操作系统提供的一种通知机制,用于在进程间传递简单的通知信息。
-
信号是一种异步事件,进程无需主动等待信号到来,可以在任意时刻被信号中断。
-
接收进程可以通过信号处理函数(Signal Handler)来处理接收到的信号。
-
常见信号包括
SIGKILL
(强制终止进程)、SIGTERM
(请求终止进程)、SIGUSR1
和hSIGUSR2
(用户自定义信号)等。 -
在多进程服务中,可以通过信号来实现进程的优雅退出,或在调试进程过程中通过向进程发送信号来暂停、继续执行。
-
-
-
套接字:套接字允许在网络上的不同主机上的进程进行通信,是实现网络通信的基础。
-
特点:不仅适用于本地进程间通信,也适用于分布式系统中不同机器上的进程通信。
-
优点: 功能强大,支持网络通信,且可用于无亲缘关系的进程之间通信。
-
缺点: 相较于其他方式,编程复杂度较高。
-
- 本地套接字(UNIX域套接字):用于同一台计算机上的进程通信,速度快切无需通过网络协议,是替代管道的更灵活的方式,适合需要传输大量数据的本地进程通信。
- 网络套接字(TCP/UDP):用于不同计算机上的进程通信,通过网络协议传输数据。
- TCP 套接字提供可靠的、面向连接的通信,保证数据包的顺序和完整性,适合文件传输、Web服务等场景。
- UDP 套接字适合需要低延迟的场景,如实时音视频传输,但不保证数据的可靠性。
-
-
文件:进程可以通过读写文件来进行通信,这种方式通常用于进程之间的间接通信,例如使用临时文件或者共享文件。
-
特点:进程通过读写共享的文件进行通信。
-
优点: 简单易用,适合大数据量的持久化通信。
-
缺点: 效率低,需频繁进行磁盘读写。
表格对比总结
通信方式 | 无亲缘关系进程 | 通信效率 | 适用场景 |
---|---|---|---|
匿名管道 | 不支持 | 中等 | 简单、轻量级的数据传输 |
命名管道 | 支持 | 中等 | 简单、轻量级的数据传输 |
消息队列 | 支持 | 中等 | 结构化消息传递,任务队列 |
共享内存 | 支持 | 高 | 高速大数据传输 |
信号量 | 支持 | 低 | 同步控制 |
信号 | 支持 | 低 | 异步事件通知 |
套接字 | 支持 | 中等 | 分布式和网络通信 |
文件 | 支持 | 低 | 持久化数据传输,日志记录 |
3. 进程的调度算法你知道吗?
先来先服务(First-Come, First-Served, FCFS)
- 描述:按照进程到达就绪队列的顺序进行调度,先到达的进程先执行。
- 特点
- 非抢占式
- 实现简单
- 不公平性(“长任务霸占”问题):长时间运行的进程会导致短作业等待过久。
- 适用场景:作业到达频率较低、执行时间较短的系统。
短作业优先(Shortest Job Next, SJN)
- 描述:优先调度执行时间最短的进程,能减少平均等待时间。
- 特点
- 可抢占或非抢占。
- 平均等待时间最短(理论上),但需要知道每个作业的执行时间(通常通过估计)。
- 饥饿问题:长时间作业可能长期得不到调度。
- 适用场景:批处理系统,不适用于交互式系统。
优先级调度(Priority Scheduling)
- 描述:根据进程的优先级决定调度顺序,优先级高的进程先执行。
- 特点
- 可抢占或非抢占。
- 饥饿问题:低优先级进程可能永远得不到执行。
- 解决方案:采用优先级老化(逐渐提高等待进程的优先级)。
- 适用场景:需要对任务赋予不同重要性的场合。
时间片轮转(Round Robin, RR)
- 描述:每个进程按照时间片的长度轮流执行,时间片用完后切换到下一个进程。
- 时间片越短,系统响应性越好,但上下文切换的次数增加,可能导致调度开销增大。
- 时间片太长则会退化为先来先服务。
- 特点
- 抢占式。
- 平均响应时间较短,提升系统响应性。
- 时间片的选择非常重要
- 时间片太短:频繁切换导致开销增加。
- 时间片太长:响应时间变长,类似FCFS。
- 适用场景:交互式或实时系统,如桌面系统和移动设备操作系统。
最高响应比优先(Highest Response Ratio Next, HRRN)
- 描述:通过计算每个进程的响应比来决定哪个进程应该被优先调度。
- 响应比 = (等待时间 + 服务时间) / 服务时间
- 等待时间:进程在就绪队列中等待的时间。
- 服务时间:进程预计的执行时间。
- 响应比会随着等待时间的增加而提升。
- 特点:
- 非抢占式。
- 公平性:对于短任务,其服务时间小,初始响应比就较高,容易被优先调度。对于长任务,随着等待时间的增加,响应比主键提升,最终也会被调度,避免了长任务的饥饿。
- 较短的平均等待时间。
- 避免饥饿:长作业的等待时间长会提高其响应比,最终能够得到执行。
- 计算复杂性:HRRN 需要实时计算每个进程的响应比,这增加了调度的计算复杂度。
- 无法提前知道执行时间:算法假设我们已经知道每个进程的执行时间,但实际上这一点在很多系统中是无法准确预测的,通常需要依赖估算。
- 适用场景:兼顾公平性和效率的场合。
多级反馈队列(Multilevel Feedback Queue, MLFQ)
-
描述
-
由多个优先级不同的队列组成,高优先级队列时间片较短,低优先级队列时间片较长。
-
新进程进入高优先级队列。
-
允许进程在不同的队列之间动态调整优先级。
-
时间片用完或等待时间较长的进程会降低优先级。
-
-
特点
- 抢占式。
- 综合了时间片轮转和优先级调度的优点,能够灵活处理短任务和长任务,兼顾响应时间和吞吐量。
- 算法设计复杂,实现难度大,需要根据应用场景调整参数。
-
适用场景:多任务、多类型的操作系统。
对比总结
算法 | 抢占式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
先来先服务 FCFS | 否 | 简单易实现 | 长作业可能导致短作业等待过久 | 批处理系统,作业少的场景 |
短作业优先 SJN | 可选 | 平均等待时间最短 | 饥饿问题 | 批处理系统 |
优先级调度 Priority Scheduling | 可选 | 按优先级执行 | 饥饿问题,需解决低优先级等待问题 | 任务优先级显著不同的场景 |
时间片轮转 RR | 是 | 响应时间短,适合交互式系统 | 时间片选择影响性能 | 交互式系统 |
最高响应比优先 HRRN | 否 | 权衡公平性和效率 | 实现稍复杂 | 批处理系统 |
多级反馈队列MLFQ | 是 | 适应性强,综合多种算法优点 | 实现复杂 | 多任务现代操作系统 |