您的位置:首页 > 其它

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

2016-08-02 11:33 309 查看

进程间通信—简介

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,这一次就系统的看一看吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: