进程管理
About 3 min
进程与线程
进程与线程的基本概念
进程(Process):是操作系统进行资源分配和调度的基本单位,每个进程都有独立的内存空间。进程是一个独立的执行环境,拥有独立的内存空间和系统资源。
线程(Thread):是CPU调度和分派的基本单位,线程共享所属进程的资源。线程是进程内的一个执行单元,多个线程共享进程的内存空间和资源。
在Java中:
- 一个JVM实例就是一个进程
- Java线程是映射到操作系统的原生线程上
- 通过
java.lang.Thread
类可以创建和管理线程
进程的特点
- 独立性:进程是资源分配的基本单位,每个进程都有独立的地址空间
- 动态性:进程是程序的一次执行过程,是动态的
- 并发性:多个进程可以并发执行
- 异步性:进程按各自独立的、不可预知的速度向前推进
线程的特点
- 轻量级:创建和销毁成本低
- 共享性:同一进程内的线程共享进程的资源
- 并发性:多线程可以并发执行
- 灵活性:线程切换开销小
进程调度
常见的进程调度算法
先来先服务(FCFS)
- 按照进程到达的先后顺序进行调度
- 优点:公平简单
- 缺点:对短作业不利
短作业优先(SJF)
- 优先调度运行时间短的进程
- 优点:有利于短作业
- 缺点:可能导致长作业饥饿
优先级调度
- 按照进程的优先级进行调度
- 分为抢占式和非抢占式
- Java线程的优先级(1-10)就是基于此实现
时间片轮转
- 每个进程被分配一个时间片
- 时间片用完后被切换到队列末尾
- 多线程并发执行的基础
多级反馈队列
- 结合多个队列的优势
- 可以同时兼顾短作业和交互式作业
进程间通信
进程间通信(IPC)的主要方式
管道(Pipe)
- 半双工通信方式
- 数据单向流动
- 适用于父子进程间通信
命名管道(Named Pipe)
- 可以在不相关的进程间通信
- 支持多个进程间的通信
消息队列(Message Queue)
- 消息的链表
- 存放在内核中
- 消息具有特定的格式
共享内存(Shared Memory)
- 最快的IPC方式
- 多个进程共享同一块内存空间
- 需要同步机制配合
信号量(Semaphore)
- 主要用于进程间同步
- 也可用于进程间通信
套接字(Socket)
- 可用于不同机器间的进程通信
- 最为灵活的通信方式
同步与互斥
- 互斥:对共享资源的互斥访问
- 同步:进程间的协调执行关系
实现机制
- 信号量:P、V操作
- 管程:封装的互斥访问方法
- 条件变量:等待和通知机制