我想在两个不同的程序之间进行通信。一个修改过的流光溢彩程序,它输出 LED 信息和我自己的读取这些信息的程序。
我阅读了命名管道和共享内存。但对我来说,不清楚数据存储在哪里。由于我将交换大量数据,我不想每次都将这些数据写入磁盘。我正在使用树莓派,而 SD 卡应该可以使用更长的时间;)
所以基本问题是:用什么方法可以在不写入磁盘的情况下将信息交换到另一端?我不确定共享内存是否写入 ram,我想说明一下。我读到的另一个想法是 /dev/shm ,它应该是一个 ram 磁盘。我也可以在这个位置使用命名管道吗,这些信息会不会保存在 ram 中?
最好的方法是什么?谢谢 :)
我阅读了命名管道和共享内存。但对我来说,不清楚数据存储在哪里。
在这两种情况下,数据都存储在内存中(命名管道看起来像是驻留在文件系统中,但实际数据存储在内存中)。
哪种方法更好,取决于实际应用。管道具有相当有限的缓冲区(最有可能64kb)并且当缓冲区已满时写入它会阻塞。共享内存可以是任意大的,但不利的一面是,共享内存就是这样——普通内存。您必须自己处理同步等。
共享内存和命名管道(和 unix 域套接字)IPC 不会写入您的 SD 卡,除非您分配的内存超过可用物理 RAM(256MB 或 512MB,具体取决于您的 raspberrypi 型号)。如果您这样做,它将开始交换并且可能会减慢速度。