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