进程间通信笔记(1)—简介

来源:互联网 发布:sql insert 单引号 编辑:程序博客网 时间:2024/06/06 22:45

进程间通信—简介

UNP卷1讲了网络通信,套接字编程的东西。卷2则是进程间通信IPC的内容,也要开始看了!

1.概述

IPC即进程间通信,全称(Interprocess Communication)的简称。
浏览了一下书的目录结构,首先分为了Posix和System V两大阵营,然后分别介绍了一些通信方式和同步方式,这些以前或多或少都听说过,但没有细究:

1.管道和FIFO
2.Posix消息队列
3.System V消息队列
4.互斥锁、条件变量和读写锁
5.Posix和System V信号量
6.共享内存mmap
7.Posix共享内存区
8.System V共享内存区

这些都是多线程和多进程学习的基础,UNP2这本书也要开始好好学习了。


2.进程、线程与信息共享

进程间共享信息的三种方式,与内核相关,书中给出一个示意图:

这里写图片描述

左边共享文件系统中某个文件的内容,通信的进程需要穿过内核(例如read、write等);中间共享内核中的信息,典型的例子有管道、System V消息队列和信号量,访问共享信息是对内核的一次系统调用;最右就是共享内存区的访问,通信双方设定好了共享内存区就不涉及内核而访问其中数据。


3.持续性问题

分为三种类型:

1.进程持续型:例如管道、FIFO,IPC对象一直存在到最后一个进程关闭它。
2.内核持续型:例如消息队列,IPC对象存在到内核自举或显示删除。
3.文件系统持续型:一直存在到显示删除为止。

书中总结了各种IPC对象的持续性,这也是书中要讲的IPC类型,这里先预热一蛤:

IPC类型 持续性 管道 随进程 FIFO 随进程 Posix互斥量 随进程 Posix条件变量 随进程 Posix读写锁 随进程 fcntl记录上锁 随进程 Posix消息队列 随内核 Posix有名信号量 随内核 Posix基于内存的信号量 随进程 Posix共享内存区 随内核 System V消息队列 随内核 System V 信号量 随内核 System V 共享内存区 随内核 TCP 套接字 随进程 UDP 套接字 随进程 UNIX 域套接字 随进程

上述没有文件系统持续性,一般情况下,我们有时为了测试方便,都是使用文件IO来在进程间通信,不过这不作为IPC方式,可能因为读写文件的操作其原子性同步性都在于人为的去控制。


4.名字空间

跟两个进程间是否有亲缘关系有关,没有亲缘关系的两个进程要进行通讯,两者之间需要标志符或某种形式的名字。这个很好理解,不同的IPC有不同的标识,例如网络套接字就是描述符,Posix消息队列就是mqd_t值,而管道没有名字(匿名管道),因此它只能用于有亲缘关系的进程,例如父子进程间进行通信。


5.总结

第一章讲了很多概述性的东西,有些东西还是去具体的章节学习会比较深刻,比如fork函数对IPC的影响等,书中的表格不足以完全说明问题,只能作为参考的手册。

书中最后说了本书的四个领域:
1.消息传递
2.同步
3.共享内存
4.过程调用

准备花一些时间着重将前三个好好看看,其实之间的项目中也或多或少的接触过,例如mmap,这一次就系统的看一看吧。

1 0
原创粉丝点击