Unix 进程间通信:方法、问题与设计策略
1. Unix 进程间通信的发展方向
Unix 在版本 7 之后,BSD 和 System V 分支使得 Unix 进程间通信(IPC)的发展走向了两个不同的方向。BSD 方向催生了套接字(sockets),而 AT&T 分支则开发了命名管道(named pipes)以及一种专门用于传递二进制数据、基于共享内存双向消息队列的 IPC 机制,即“System V IPC”,老程序员们也称之为“Indian Hill” IPC。
System V IPC 的上层消息传递层已基本不再使用,但其下层的共享内存和信号量在需要进行互斥锁操作以及在同一机器上的进程间进行全局数据共享的场景中仍有重要应用。这些 System V 共享内存设施逐渐演变成了 POSIX 共享内存 API,该 API 在 Linux、BSD、MacOS X 和 Windows 等系统中得到支持,但经典的 MacOS 不支持。通过使用共享内存和信号量设施(如 shmget(2)、semget(2) 等),可以避免通过网络栈复制数据的开销,大型商业数据库(如 Oracle、DB2、Sybase 和 Informix)大量使用了这一技术。
2. 需要避免的问题和方法
虽然基于 TCP/IP 的 BSD 风格套接字已成为 Unix 下占主导地位的 IPC 方法,但在多程序分区的正确方式上仍存在争议。一些过时的方法尚未完全消失,还有一些来自其他操作系统的技术(通常与图形或 GUI 编程相关)的实用性也值得怀疑。
2.1 过时的 Unix IPC 方法
Unix 诞生于 1969 年,远早于 1980 年诞生的
超级会员免费看
订阅专栏 解锁全文
2616

被折叠的 条评论
为什么被折叠?



