1. 进程和线程的区别
进程是操作系统资源分配和系统调度的基本单位。
线程是操作系统系统调度的最小单位。线程是进程的子任务,一个进程继续包含线程,一个进程可以处理多个线程,这些线程之间共享同一片内存块。
- 资源开销:
- 进程: 由于每个进程都有独立的内存空间,创建和销毁进程的消耗较大。进程间切换需要保存和恢复整个进程的状态,因此上下文切换的开销较高。
- 线程:由于线程共享相同的内存空间,因此创建和销毁线程的开销较小。线程间切换只需要保存和恢复少量的线程上下文,因此上下文切换的开销较小
- 通信与同步:
- 由于进程间是相互隔离的,所以进程之间的通信需要一些特殊机制,例如管道、消息队列、共享内存等。
- 由于线程共享相同的内存空间,因此它们之间可以直接访问共享数据,线程间通信更加方便。
- 安全性:
- 进程 :由于进程间相互隔离,一个进程的崩溃不会直接影响其他进程的稳定性
- 线程 :由于线程共享相同的内存空间,一个线程的错误可能会影响整个进程的稳定性。
2. 进程调度算法
进程调度算法是操作系统中用来管理和调度进程(也称为任务或作业)执行的方法。这些算法决定了在多任务环境下,系统如何为每个进程分配CPU时间,以实现公平性、高吞吐量、低延迟等不同的调度目标。
- 先来先服务调度算法: 按照进程到达的先后时间进行调度,即最早到达的进程先执行,直到完成或阻塞
- 最短作业有限调度算法:优先选择作业时间最短的进程来运行
- 高响应比优先调度算法:综合考虑等待时间和服务时间的比率,选择具有最高响应比的进程来执行
- 时间片轮转调度算法:将CPU时间划分为时间片,每个进程在一个时间片内运行,然后切换到下一个进程
- 最高优先级调度算法:为每个进程分配一个优先级,优先级较高的进程先执行。这可能导致低优先级进程长时间等待,可能引发饥饿问题。
- 多级反馈队列调度算法:将进程划分为多个队列,每个队列具有不同的优先级,进程在队列之间移动。具有最高优先级队列的进程会更早执行,而长时间等待的进程会被提升到最高优先级队列。
- 最短剩余时间优先算法:每次选择剩余执行时间最短的进程来执行
- 最大吞吐量调度:旨在最大化单位时间内完成的进程数量
3. 进程间有哪些通信方式
- 管道: 是一种半双工的通信方式,数据只能单向流动且只允许父子进程之间通信。
- 命名管道:也是一种半双工的通信方式,但是它允许无亲缘关系的进程间通信。
- 信号量:是一个计数器,主要用来控制多个进程对共享资源的访问,常作为一种锁机制。用来控制当一个进程访问共享资源时其他进程对该共享资源的访问,主要作为不同进程之间以及同一进程内不同线程之间同步的一种手段。
- 消息队列:消息队列是消息的链表,主要存在内核区并由消息队列标识符标识。消息队列克服了信号量传递信号少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 信号:用于通知接收进程某个时间已发生,从而迫使进程执行信号处理程序。
- 共享内存:就是映射一段能够被其他进程所访问的内存。 这段内存由一个进程创建,但可以被其他进程所使用。共享内存是进程间通信的最快方式,它就是为了解决其他进程间通信方式效率低才被创建出来的。它往往与其他通信机制,比如信号量配合使用,来实现进程间的通信与同步。
- Socket套接字:是支持TCP/IP的网络通信的基本单元,主要用于在客户端和服务器之间通过网络进行通信。