进程是资源分配和拥有的基本单位,线程是CPU调度的基本单位。进程是可执行程序在系统中动态执行的抽象,线程可以理解为轻量级的进程,同一个进程内部有多个线程。一个进程拥有堆区、栈区、代码区和数据区,一个线程共享进程的堆、全局变量、静态变量、指针,引用、文件等,而独自占有栈和少量寄存器。进程切换需要保存CPU环境(栈、寄存器、页表和文件句柄等),开销较大,而线程切换只需要保存程序计数器、少量寄存器和栈的内容,开销较小。多进程引申出IPC,多线程引申出同步互斥机制。

进程间的通信方式:文件、管道、命名管道、信号、共享内存、消息队列、套接字、命名管道
管道是一种最基本的 IPC 机制,作用于有血缘关系的进程之间,完成数据传递。调用 pipe 系统函数即可创建一
个管道。有如下特质:

  1. 其本质是一个伪文件(实为内核缓冲区)
  2. 由两个文件描述符引用,一个表示读端,一个表示写端。
  3. 规定数据从管道的写端流入管道,从读端流出。
    管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。
    管道的局限性:
    ① 数据不能进程自己写,自己读。
    ② 管道中数据不可反复读取。一旦读走,管道中不再存在。
    ③ 采用半双工通信方式,数据只能在单方向上流动。
    ④ 只能在有公共祖先的进程间使用管道。

线程间的同步互斥手段:互斥量(互斥锁)、读写锁、条件变量、信号量