进程间通信的共享内存
2009年9月28日
没有评论
共享内存提供了进程间通信所能实现的最高带宽。一个共享内存对象创建之后,可以访问这个对象的进程就能够使用指针直接对其读写。这就意味着,共享内存访问本身就是非同步的。如果一个进程更新共享内存的一个区域,就必须特别小心不要让其他进程读取或更新同一块区域。即使是最简单的读取操作时,其他进程仍然有可能读到变化与不稳定的数据。
为了解决这个问题,共享内存就常与其他同步原(synchronization primitives)结合在一起使用以使进程之间的内存更新原子化。如果更新的间距很小,同步原就会限制自己固有的使用共享内存的高带宽。共享内存用于以块的模式更新大量的数据是最有效的。
信号量(semaphores)与互斥体(mutexes)都是适用与共享内存结合使用的同步原。信号量是在创建进程间同步的POSIX实时标准时引入的。互斥体则是在创建线程同步的POSIX标准是引入的。互斥体也可以在不同进程中的线程之间使用。POSIX将其作为一个可选的能力,我们在这里则是支持的。一般来说,互斥体要比信号量效率更高。
用于消息传递的共享内存
共享内存与消息传递可以结合起来以提供支持以下功能的IPC:
- 非常高的性能(共享内存)
- 同步(消息传递)
- 网络透明(消息传递)
近期评论