进程与线程的区别
- 进程是系统资源分配和调度的最小单位,线程是CPU分配和调度的最小单位;线程属于进程,一个进程可以有一个或多个线程,一个线程一定属于一个进程。
- 进程在运行时有自己独立的内存单元,而多个线程共享进程的内存(代码段,数据段,但有自己的栈段) -> 进程之间互不影响,但一个线程挂掉会导致整个进程死掉
- 系统开销:(1)创建和撤销进程时,系统要为之分配和撤销资源,因此线程的创建和撤销要大于线程;(2)进程在切换时涉及到当前CPU环境的保存以及新被调度的进程CPU环境的设置,而线程切换只需设置少量寄存器内容,不涉及存储器管理操作; -> 进程切换编程调试相对简单,线程相对复杂
进程间通信
- 管道:单向,字节流,可读可写
1.1 匿名管道 - 父子进程间通信
1.2 命名管道 - 可用于非父子进程间通信
- 消息队列:双向,数据报,可读可写
每个消息的大小有限,总大小有限,消息队列数有限
-
信号量(1)在目的进程中安装信号,需要提供一个信号处理函数(2)信号被某个进程产生(3)操作系统响应信号,信号在目的进程中注册(4)信号在进程中注销,在执行信号处理函数前需要把信号在进程中注销(5)信号生命终止,进程捕获信号,执行信号处理函数
-
共享内存:同一块物理内存映射到不同的虚拟内存,实现不同内存的资源共享
最快的方式