目录
进程
进程是系统资源分配的最小单位。
多进程通信方式
管道、信号、共享内存、消息队列
管道(无名管道、命名管道)
a. 管道是半双工方式的,以先进先出方式保存一定数量的数据。
b. 使用无名管道互相连接的任意进程必须位于一个相关的进程家族里。因为管道必须受到内核的限制,所以如果 进程没有在管道创建者的家族里面,则该进程将无法访问管道。
c. 管道的实质其实是一个内核缓存区。
信号
a. 进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。是一种异步通信方式。
b. 信号是Linux 系统中用于进程之间通信或操作的一种机制,信号可以在任何时候发送给某一进程。
共享内存
a. 共享内存即允许两个或者多个进程共享一个存储区,这段存储区进程可以映射至自身地址,大家共享这块存储区域。
b. 效率高,可直接读写内存不需要任何数据拷贝。
消息队列
a. 消息队列就是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列 有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队 列中读走消息。消息队列是随内核持续的。
b. 可以按需要读取特定类型消息,不需要按队列次序。
父子进程的关系
- 关于资源。子进程除了代码段和父进程共享外,剩余就是一个复制过来的副本,二者也不共享地址空间。
- 关于文件描述符。父子进程共享文件表项,一个进程修改,另一个进程会知道此文件被修改。
线程
线程是程序执行的最小单位,即CPU调度的基本单位。
多线程同步
两个或两个以上的进程或线程在运行过程中协同步调,按预约的先后次序运行。
多线程互斥
一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。
线程与进程之间的关系
a. 一个进程的所有线程都共享该进程所获得的资源
b. 各线程有属于自己的一小部分资源,就是栈空间,保存其运行状态和局部自动变量。
c. 在线程中 malloc 等申请的空间都是占的进程的资源,即堆资源。
多进程与多线程的区别
a. 进程是系统资源分配的最小单位,线程是程序执行的最小单位,即CPU调度的最小单位。
b. 进程创建开销大,线程创建开销小。
c. 进程间通信比较麻烦,线程间通信比较方便。
d. 多进程程序更加健壮。多线程出现某个线程有问题导致整个业务有问题,多进程有独立的地址空间,一个进程有问题影响并不大。