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 进程间通信的主要内容,如果未能解决你的问题,请参考以下文章

进程间的通信方式与区别

进程间通信:一台服务器多客户端

C ++中是否有用于远程进程间通信的API?

进程间通信---mmap详解(与system V ipc通信对照)

Boost进程间:如何启动一个新进程?

c# 进程间通信 IPC