共享内存对象(使用shm_open创建)和共享内存段(Shmget)之间有什么区别?
它们是否有任何限制,不能像共享内存shmmax和shmall那样进行调优?
这两者之间是否有任何性能差异,在什么IPC场景中应该使用这些方案?
发布于 2013-10-03 08:41:12
"shmget“是一种在Linux内核中实现的特定于Linux的分配共享内存的方法。
"shm_open“是一个库函数,它通过使用mmap映射文件来模拟共享内存。因为文件是使用“共享”标志映射的,所以内存在进程之间共享。
在Linux1.x中,"/dev/shm“目录(包含文件)只是一个普通目录,因此使用"shm_open”的共享内存实际上是磁盘文件。在Linux3.x中,"/dev/shm“是一个特殊的目录,以避免将共享内存写入磁盘。
我认为这两种方法都可以用另一种方法代替。这仅仅是因为历史原因,为什么有两种不同的方法来创建共享内存。
发布于 2014-09-30 21:20:37
我在测试中发现,通过shm_open访问的内存比通过shmget访问的内存要快。除此之外,它们在功能上非常相似。两者之间肯定有一些细微的缓存或TLB差异,但我不熟悉幕后的细节。
注意,我不得不使用shm_open的POPULATE选项来提高性能。
https://stackoverflow.com/questions/19141907
复制相似问题