プロセス間リングバッファの最適共有

プロセス間リングバッファの最適共有

私たちは組み込みLinuxシステムを実装しており、システムのバックグラウンドプロセスデータを示すリアルタイムアップデートチャートをWebサイトに提供する必要があります。

問題は、次の点でデータを最もよく共有する方法です。

  1. Cで書かれた新しい値でリングバッファを定期的に更新するデータ生成手順。

  2. バッファの最新情報を取得する必要があるWebサーバーCGI機能。私たちはPythonを使ってCGI(nginx + wsgi + flask)を実装します。

私は現在これを行うためにUnixソケットソリューションに向かっていますが、バックグラウンドプロセスが干渉しないようにするには、Cプログラムのマルチスレッドが必要になると思います。

より簡単な方法があるかどうか疑問に思います。バッファメモリを仮想ファイルに直接マッピングできますか? RAMディスクにある一般ファイルをバッファとして使って探して書き込むだけではどうでしょうか?

ベストアンサー1

ファイルと原子の名前変更を使用する簡単なソリューションは、スクリプト言語を使用して簡単に実装できます。

送信者

  • ファイルにデータを書き込むA
  • ファイル名をA次のように変更します。B

名前の変更はアトミックに行われ、受信者が以前のファイルを処理している間に行うことができます。

受信者がデータを読み取らない場合、送信者はブロックされません。

受話器

  1. 同じデータを2回処理しても問題ありません。

    • ファイルを開くB
    • データの読み取り
    • ファイルを閉じる

    このオプションは、受信者が複数ある場合にも機能します(たとえば、Webサーバーに対する複数のCGIプロセス)。

  2. 受信者が同じデータを2回処理してはならない場合:

    • ファイル名をB次のように変更します。C
    • 成功したら、ファイルを読み取り、処理します。C
    • オプションでファイルを削除C

    このオプションは単一の受信機でのみ使用できます。

どちらの場合も、送信者が受信者が読み取ることができるよりも速くデータを書き込むと、古いデータが失われます。

もちろん、他のオプションもあります。

おすすめ記事