43.Linux/Unix 系统编程手册(下) -- 进程间通信简介

1.IPC 工具的分类
	1.通信
		1.数据传输工具
			区分这些工具的关键因素是写入和读取的概念。为了进行通信,一个进程将数据写入IPC工具中,另外一个进程从中读取数据。
		这些工具要求在用户内存和内核内存之间进行2次数据传输。
		    一次传输是在写入的时候从用户内存到内核内存,另外一次传输是在读取的时候从内核内存到用户内存。

		    1.字节流 : 管道,FIFO, 以及流 socket
		    2.消息 : System V 消息队列,Posix 消息队列,以及数据报 socket
		    3.伪终端 

		    数据传输工具和共享内存之间的差别:
		    1.尽管一个数据传输工具可能会存在多个读取者,但读取操作是具有破坏性的。读取消耗数据,其他进程将无法获取所消耗的数据。
		    2.读取者和写者进程之间的同步是原子的。如果一个读取者试图从一个当前不包含数据的数据传输工具中读取数据,那么在默认情况
		      下读取操作会阻塞直至一些进程向该工具写入了数据。

		2.共享内存
			共享内存允许进程通过将数据放到由进程间共享的一块内存中以完成信息的交换。(内核通过将每个进程中的页表条目指向同一个
		RAM分页来实现这一功能)。一个进程可以通过将数据放到共享内存块中使得其他进程读取这些数据。由于通信无需系统调用以及用户内存
		和内核内存之间的数据传输,因此共享内存非常快。

			共享内存包括:System V 共享内存,Posix 共享内存,以及内存映射。
			注意点:
				1.尽管共享内存的通信速度更快,但速度上的优势是用来弥补需要对共享内存上发生的操作进行同步的不足的。当一个进程正在
				更新共享内存中的一个数据结构时,另一个进程就不应该试图修改这个数据结构。在共享内存中,通常使用信号量作为同步方法。
				2.放入共享内存的数据对所有共享这块内存的进程可见。

	2.同步
		1.信号量
			一个信号量是由内核维护的整数,其值永远不会小于0.
		2.文件锁
			文件锁是设计用来协调操作同一文件的多个进程的动作的一种同步方法。它也可以用来协调对其他资源的访问。文件锁分为2类:读锁和写锁。
		3.互斥体和条件变量

	3.信号

2.IPC 工具比较
	1.功能:
		数据传输工具提供了读取和写入操作。
		其他应用程序设计更适合采用共享内存方式。

	2.网络通信
		1.Unix domain 同一主机
		2.Internet domain 不同系统

	3.可移植性
		System V 比 Posix 移植性更好

	4.可访问性

	5.持久性
		持久性指的是,一个 IPC 工具的生命周期。

		1.进程持久性
			管道,FIFO以及 socket 是进程持久的 IPC 工具
		2.内核持久性
			System V IPC 和 Posix IPC
		3.文件系统持久性
			具备文件持久性的 IPC 对象会在系统重启时保持其中的信息,唯一具备文件持久的是内存映射文件的共享内存

	6.性能


猜你喜欢

转载自blog.csdn.net/enlyhua/article/details/83216413
今日推荐