UNIX IPC 第一弹 综述
0. 为什么会有这边文章?
一直对这方面的技术只有些模棱两可的了解,但又没有个统一完整的认识,在学习了《Modern Operating System》和《Advanced Programming in the UNIX Environmet》的相关章节后,做一个总结。
1. 什么是进程(process)?为什么要有进程?
进程是可执行程序加载到内存后,在CPU上执行的代码,包括一些相关的资源及状态,是一个动态的,变化的状态。
进程是系统资源分配的基本单位,一个程序要想执行,则必须要加载到内存中,在执行时要有相关的软硬件资源,所以系统要给“进程”分配好所有的资源后,才能使进程达到ready的状态,进而再在CPU上执行。
两个经典的“进程”定义:
- A process is just an instance of an executing program, including the current values of the program counter, registers and variables. -- Modern Operating System v4
进程是一个可执行程序的实例,包含PC值,寄存器值,变量值。
- 进程是计算机上关于某数据集合的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统的基础。它的执行需要系统分配资源创建实体后才能运行。
API
- fork()
- vfork()
2. 什么是线程?为什么要有线程?
线程是执行的最小单位,是在CPU上运行的实体,是轻量级的进程,之所以产生是因为进程创建及销毁带来大量的系统资源损耗。线程的创建及销毁比进程要快10-100倍。
有了线程可以更好的支撑并行编程,更好的支持SMP处理器,减小上下文切换,性能更高。
分类,根据调度者是在核内还是核外分为
- 用户级线程
- 内核级线程
Linux使用混合模型。
POSIX线程模型
3. 什么是进程间通信?为什么要有进程间通信?
进程由于地址空间的隔离,需要某种相互通信的机制,以达到协同工作的目的。
进程通信(Inter Process Communication)存在以下几种:
- 进程与进程间
- 线程与线程间
- 进程与线程间
进程通信主要考虑解决以下问题:
- 如何进行通信
- 如何避免竞争
- 如何保证资源的一致性
经典问题
- 生产者消费者问题
- 哲学家就餐问题
- 读写者问题
4. 进程间通信有哪些方式?
进程与进程间通信的方式有:
- 共享内存
- 消息队列
- 信号量
- 有名管道(FIFO)
- 无名管道(pipe)
- 信号
- 文件
- 套接字socket
线程与线程间通信的方式:
第一部分是可以使用进程通信的方式:
- 共享内存
- 消息队列
- 信号量
- 有名管道(FIFO)
- 无名管道(pipe)
- 信号
- 文件
- 套接字socket
第二部分是线程特有的方式:
- 互斥量
- 自旋锁
- 条件变量
- 读写锁
- 线程信号
- 全局变量
5. IPC方式各有哪些优缺点?
6. IPC通信还有那些不足?
- 性能?
- 易用性?
- 通用性?
原文地址:https://www.cnblogs.com/Freeee/p/11588423.html
时间: 2024-10-04 01:15:53