Chinaunix首页 | 论坛 | 博客
  • 博客访问: 374725
  • 博文数量: 124
  • 博客积分: 2911
  • 博客等级: 少校
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-15 15:57
文章分类

全部博文(124)

文章存档

2012年(6)

2011年(26)

2010年(92)

我的朋友

分类: LINUX

2011-08-29 20:22:22

By firework2@foxmail.com

类Unix系统的共享内存有好几种机制,网上一搜就一大堆了,下面是几个我认为介绍的还不错的 : )http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html

http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html

http://blog.csdn.net/nellson/archive/2010/03/20/5398436.aspx  (里面的时间性能测量不全面)
初学的同学多半都会想横向对比一下,到底用mmap实现共享内存好呢,还是用shmget好啊?下面是我个人的一些理解:
1. 二者本质上是类似的,mmap可以看到文件的实体,而 shmget 对应的文件在交换分区上的 shm 文件系统内,无法直接 cat 查看
2. 安全性:mmap 方式对应的真实文件,如果用户有权限即可查看,甚至删除                 shmget 方式其实也一样,好了一层皮罢了(ipcrm -m ...)
3. 一致性:mmap 方式下各进程映射文件的相同部分可以共享内存
shmget 时各个进程共享同一片内存区不建议使用交叠的方式使用 mmap
4. 持续性:进程挂了重启不丢失内容,二者都可以做到
机器挂了重启,mmap 可以不丢失内容(文件内保存了OS同步过的映像),而 shmget 会丢失
5. 易用性:mmap 的接口会简单一些
6. 通用性:posix 的 mmap 会相对广泛一些
7. 其他:mmap在某些内核版本下会频繁读写磁盘,需要注意一下
如果你担心会因误删文件导致 mmap 出错,那就用 shmget 吧,否则的话直接mmap就可以了,用起来简单一些 : )
更多的细节,需要大量的实践 + 阅读内核实现来确认,暂时没考虑
另外要注意在有必要的时候捕获信号,还有就是要注意检查这些系统函数的返回值

UNIX 共享内存应用中的问题及解决方法






阅读(2403) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~