組み込みLinuxシステムを実装しており、システムのバックグラウンドプロセスからのデータを示すライブ更新グラフをWebサイトで提供する必要があります。
問題は、以下の間でデータを最適に共有する方法です。
Cで記述された新しい値でリングバッファを定期的に更新するデータ生成プロセス。
バッファの最新の内容をフェッチする必要があるWebサーバーのCGI関数。 CGI(nginx + wsgi + flask)にはPython)を使用します。
私は現在、このためのUNIXソケットソリューションの作成に傾倒していますが、バックグラウンドプロセスが妨げられないようにするために、Cプログラムでマルチスレッドを使用する必要があると考えています。
もっと簡単な方法はないのだろうか。バッファメモリを直接仮想ファイルにマッピングできますか? RAMディスク上の通常のファイルをバッファとして使用し、それをシークして書き込むのはどうですか?
スクリプト言語を使用して簡単に実装できるファイルとアトミックな名前変更を使用したシンプルなソリューション。
送信者
A
A
からB
に変更します名前の変更はアトミックであり、レシーバーが古いファイルを処理しているときに行うことができます。
受信者がデータを読み取らない場合、送信者はブロックしません。
レシーバー
同じデータを2回処理しても問題がない場合:
B
このオプションは、複数のレシーバーがある場合にも機能します。 Webサーバーの複数のCGIプロセス。
受信者が同じデータを2回処理してはならない場合:
B
からC
に変更しますC
を読み取って処理しますC
を削除しますこのオプションは、単一のレシーバーでのみ機能します。
どちらの場合も、送信者が受信者が読み取るよりも速くデータを書き込むと、古いデータは失われます。
もちろん、他のオプションもあります。