提高并发量
多进程、多线程、IO多路复用
进程VS线程
- 根本区别
- 进程是操作系统资源分配的根本单位
- 线程是任务调度和执行的基本单位
- 开销
- 进程有独立代码和数据空间,切换开销较大
- 线程是轻量级进程,共享代码和数据空间。但有自己的运行栈和程序计数器,切换开销较小。
- 所处环境
操作系统中可多个进程共同执行,一个进程中可多个线程共同执行。(CPU调度,每个时间片只有一个线程) - 内存分配
- OS为进程分配内存
- 线程资源来自所属进程,共享资源
- 包含关系
- 线程是进程的一部分 ,因此线程也是轻量级的进程。
进程间通信
- 管道
- 半双工,一端读一端写
- 只能用于父子进程或兄弟进程
- FIFO
- 命名管道,无关进程间交换数据
- 消息队列
消息的链接表 - 信号量
- 共享内存
多个进程可同时访问。
信号量+共享内存可同步访问
死锁
- 死锁概念
两个或两个以上的进程都等待对方执行完毕才能执行,引发死锁。 - 死锁的原因
- 竞争资源
- 推进顺序非法
P1:request(P2)
P2: request(P1)
- 死锁的四个必要条件
- 互斥,任意时刻资源只属于一个进程
- 不可剥夺,资源在被进程使用完毕之前不可被获取
- 请求和保持,进程被阻塞时不释放自身资源
- 环路等待,死锁时必有环
- 避免死锁
OS对进程所分配的资源进行动态检查,若分配后可能会死锁将不予分配,反之分配其资源。