ram中的共享内存或命名管道?

时间:2014-04-24 07:13:16

标签: c++ c memory pipe shared

我想在两个不同的程序之间进行通信。一个改装的流光溢彩程序,输出有关信息和我自己的程序来读取这些信息。

我读到了有关命名管道和共享内存的信息。但对我来说,目前还不清楚数据的存储位置。由于我将交换大量数据,我不想每次都将这些数据写入磁盘。我正在使用覆盆子Pi,SD卡应该可以使用更长时间;)

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

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

2 个答案:

答案 0 :(得分:4)

  

我读到了有关命名管道和共享内存的信息。但对我来说,目前尚不清楚   数据存储的位置。

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

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

答案 1 :(得分:3)

共享内存和命名管道(以及unix域套接字)IPC不会写入您的SD卡,除非您分配的内存超过256MB或512MB的可用物理RAM,具体取决于您的raspberrypi模型。如果你这样做,它将开始交换,并可能会放慢速度。