进程通信-共享内存-mmap()
来源:互联网 发布:运动文胸 知乎 编辑:程序博客网 时间:2024/05/18 21:47
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。
使用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的
LINUX支持多种共享内存的方式: mmap()系统调用,Posix共享内存,以及系统V共享内存.
Linux环境进程间通信(五):共享内存(上) http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html
Linux环境进程间通信(五):共享内存(下) http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html
使用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件。共享内存中的内容往往是在解除映射时才写回文件的。因此,采用共享内存的通信方式效率是非常高的
LINUX支持多种共享内存的方式: mmap()系统调用,Posix共享内存,以及系统V共享内存.
mmap使用的基本流程是:
open()调用打开一个文件-->mmap()映射到进程地址空间-->像普通指针一样使用
参考资料:
对话UNIX:通过共享内存进行进程间通信 http://www.ibm.com/developerworks/cn/aix/library/au-spunix_sharedmemory/index.htmlLinux环境进程间通信(五):共享内存(上) http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html
Linux环境进程间通信(五):共享内存(下) http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html
- 进程通信--mmap内存共享
- 进程通信-共享内存-mmap()
- 进程通信-共享内存-mmap()-code1
- 进程通信-共享内存-mmap()-code2
- 进程通信-共享内存-mmap()-code3
- 进程间通信之mmap共享内存
- 进程通信----共享内存以及mmap函数实现共享内存
- Linux进程间通信源码剖析,共享内存(mmap)
- Linux进程间通信源码剖析,共享内存(mmap)
- Linux进程间通信--mmap共享内存(一)
- Linux进程间通信--mmap()共享内存(二)
- linux进程通信(一)--共享内存--mmap()
- linux 中mmap的用法(进程间通信-共享内存)
- Linux\Unix IPC进程通信实例分析(一):共享内存通信---文件映射mmap方式
- Linux进程共享通信 -- mmap实现
- 进程通信--共享内存
- 进程通信-共享内存 .
- 进程通信-----共享内存
- 第三章:物理层
- VS2008中设置使用GDI+
- 单片机中断技术
- like '%'+字段+'%'
- 如何在命令行里添加 第三方包到 classpath里?
- 进程通信-共享内存-mmap()
- 第三章:数据链路层
- java中的集合和数组的帮助类
- Php的安装以及验证apache
- C# DateTime类获取周信息
- 第三章:数据链路层(二)
- Jquery 跨域请求
- Java Daemon线程
- Linux驱动开发学习步骤