【问题标题】:Shared memory or named pipes in ram?ram中的共享内存或命名管道?
【发布时间】:2014-06-09 08:18:03
【问题描述】:

我想在两个不同的程序之间进行通信。一个输出 LED 信息的修改后的流光溢彩程序和我自己的读取此信息的程序。

我读到了命名管道和共享内存。但对我来说,不清楚数据存储在哪里。由于我将交换大量数据,我不想每次都将这些数据写入磁盘。我正在使用树莓派,SD 卡应该可以使用更多时间;)

所以基本问题是:用什么方法可以在不写入磁盘的情况下与另一端交换信息?我不确定是否将共享内存写入 ram,我想澄清一下。 我读到的另一个想法是 /dev/shm 应该是一个 ram 磁盘。我也可以在这个位置使用命名管道吗?信息是否会保存在 ram 中?

最好的方法是什么?谢谢:)

【问题讨论】:

  • 尝试了一个非常复杂的解决方案 - TCP/IP 通信(在两个应用程序之间建立客户端/服务器通信)对您来说是一个有效的解决方案吗?除此之外,命名管道正是此类任务的基础设施
  • 命名管道可能是最简单的变体。然后是unix域套接字。然后总是有 tcp/ip,如前所述。将命名管道或 unix 域套接字放在哪里并不重要,只有文件名和一些标志被写入文件系统。 /dev/shm 如果您想随机播放大量数据,非常方便(它比“经典” shm 更容易使用)。
  • @NirMH 与管道或 UNIX 域套接字相比,TCP/IP 有哪些优势,前提是在同一台机器上的进程之间进行通信?
  • @el.pescado: TCP/IP 没有写入磁盘 - 数据通过 TCP/IP 网络层作为字节流传输 - 我认为最低层将是 TCP(不会下降到NIC 本身),但我不完全确定
  • @NirMH 我的意思是,当您可以使用例如UNIX 域套接字?

标签: c++ c memory pipe shared


【解决方案1】:

我读到了命名管道和共享内存。但对我来说还不清楚 数据的存储位置。

在这两种情况下,数据都存储在内存中(命名管道看起来像是驻留在文件系统中,但实际数据存储在内存中)。

哪种方法更好,取决于实际应用。管道的缓冲区相当有限(很可能是64kb),当缓冲区已满时,写入它会阻塞。共享内存可以任意大,但不利的一面是,共享内存就像那样 - 普通内存。您必须自己处理同步等问题。

【讨论】:

    【解决方案2】:

    共享内存和命名管道(以及 unix 域套接字)IPC 不会写入您的 sdcard,除非您分配的内存比可用物理 RAM 多,取决于您的 raspberrypi 型号,可用物理 RAM 为 256MB 或 512MB。如果您这样做,它将开始交换并且可能会变慢。

    【讨论】:

      猜你喜欢
      • 2017-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      相关资源
      最近更新 更多