进程之间环形缓冲区的最佳共享

进程之间环形缓冲区的最佳共享

我们正在实现一个嵌入式 Linux 系统,并且必须在网站上提供实时更新图表,显示来自系统后台进程的数据。

问题是如何在以下方面以最佳方式共享数据:

  1. 定期用新值更新环形缓冲区的数据生成过程,用 C 编写。

  2. 必须获取缓冲区最新内容的网络服务器 CGI 函数。我们使用 Python 来实现 CGI(nginx+wsgi+flask)。

我目前倾向于为此制定一个unix套接字解决方案,但我认为这需要C程序中的多线程以确保后台进程不受干扰。

我想知道有没有更简单的方法。我们可以直接将缓冲区内存映射为虚拟文件吗?使用 RAM 磁盘上的普通文件作为缓冲区并仅查找并写入它怎么样?

答案1

使用文件和原子重命名的简单解决方案可以使用脚本语言轻松实现。

发件人

  • 将数据写入文件A
  • 将文件重命名AB

重命名是原子的,并且可以在接收者处理旧文件时完成。

如果接收方没有读取数据,发送方不会阻塞。

接收者

  1. 如果处理相同的数据两次没有问题:

    • 打开文件B
    • 读取数据
    • 关闭文件

    当存在多个接收器时(例如 Web 服务器的多个 CGI 进程),此选项也适用。

  2. 如果接收方不应两次处理相同的数据:

    • 将文件重命名BC
    • 如果成功,读取并处理文件C
    • 可选择删除文件C

    此选项仅适用于单个接收器。

在这两种情况下,如果发送方写入数据的速度比接收方读取数据的速度快,旧数据就会丢失。

当然还有其他选择。

相关内容