RAM 磁盘与 Boost 进程间通信
Posted
技术标签:
【中文标题】RAM 磁盘与 Boost 进程间通信【英文标题】:RAM-disk vs Boost interprocess communication 【发布时间】:2014-03-10 12:51:50 【问题描述】:要让一组进程进行通信,它们之间的优缺点是什么:
-
RAM 磁盘
促进进程间通信
RAM 磁盘允许与仅使用文件的程序进行通信。
由于要复制的文件系统接口,RAM 磁盘的性能损失有多大?
【问题讨论】:
【参考方案1】:这是一种错误的二分法。
如果您通过
共享 RAM 磁盘上的文件 - 您仍在使用内存映射文件(已实现 Boost Interprocess) 命名管道(unix 上的 FIFO)您仍在使用 IPC(因为管道或套接字对是 IPC 原语)。您不能/避免/使用 RAM 磁盘进行 IPC。
事实上,它会发出警报信号,因为听起来您在假设使用 RAM 磁盘会以某种方式“更简单”。在实践中,如果您不进行适当的锁定,它只会更简单。不过,这只是错误的来源。
【讨论】:
AFAIK,RAM 磁盘被操作系统视为普通磁盘。因此,如果我想将例如日志发送到日志查看器,我可以通过 RAM 磁盘以透明的方式进行,即执行与管理文件所需的完全相同的操作;这里的 RAM 是磁盘。另一方面,内存映射是 RAM 中磁盘的一部分的副本,因此如果我修改 RAM 部分中的某些内容,相同的更改将应用于(稍后?)磁盘。 你的意思是什么?你的意思是说你实际上不是在做 IPC,而只是在共享文件? IPC 需要使用与 fstream 等提供的功能完全不同的特定功能。 我的意思是我想将数据从一个可执行文件移动到另一个可执行文件,我必须决定是将当前基于文件的方法保留在 RAM 磁盘上,还是移动到 IPC(管道、 ...) 方法。这种变化必须带来良好的性能改进。 只是我的经验。不过还是有点意思。共享文件排除了流式传输,因此必然比流式传输大文件效率低。我没有量化。即使我这样做了,它们也不会与您的特定开发成本/性能权衡相关【参考方案2】:如果您想知道性能损失,我认为您可以进行一些测试,因为我认为您的解决方案并不常见。
无论如何,如果您希望两个进程使用某种类型的进程间通信基础设施进行通信,请使用 boost 提供的,因为它旨在做您想做的事情,它不需要额外的基础设施,实际上也是跨平台便携。
【讨论】:
以上是关于RAM 磁盘与 Boost 进程间通信的主要内容,如果未能解决你的问题,请参考以下文章