5

データ共有の設計実装についてご意見をお聞かせください。

私は Linux 組み込みデバイス (mips 200 Mhz) で作業しており、複数のパラメーターを一度に読み書きできる複数のプロセス間である種のデータ共有を行いたいと考えています。

このデータには、毎秒更新される最大 200 個の文字列パラメーターが含まれています。プロセスは、1 秒間に約 10 回程度データにアクセスする可能性があります。

設計を効率化(CPU / メモリ)できるようにしたいと考えています。

このデータは永続的である必要はなく、再起動するたびに再作成されます。

現在、次の 2 つのオプションを検討しています。

  1. シャード メモリ IPC (SHM) + セマフォ (すべての SHM でロック) を使用します。
  2. SQLite メモリ ベースの DB を使用するには。

どちらのオプションでも、DB 操作のすべてのロジックを実行する C インターフェイス ライブラリを提供します。

SHM の場合、これはセマフォのロック/ロック解除と、インデックス付き配列として参照できるパラメーターへのアクセスを意味します。

SQLite の場合、私のライブラリは SQLite インターフェイス ライブラリのラッパーになるため、プロセスは SQL 構文を知る必要はありません (クエリと応答に対して何らかの解析を行う必要があります)。

共有メモリの方が効率的だと思います:

SQL を使用して解析する必要はなく、配列としてアクセスされます。

そうは言っても、SQLite を使用することにはいくつかの長所もあります: 既に動作し、デバッグされています (DB レベル)。柔軟性を追加します。多くの組み込みシステムで広く使用されています。

要点を言えば、

パフォーマンスに関しては、私は SQLite の経験がありません。ご意見や経験を共有していただければ幸いです。

ありがとう

4

1 に答える 1

0

SQLite のメモリ内データベースはプロセス間で共有できませんが、DB ファイルをtmpfs.

ただし、SQLite はプロセス間の同期を行いません。更新の競合を防ぐためにDB ファイルをロックしますが、1 つのプロセスがファイルが既にロックされていることを検出した場合は、ランダムな時間だけ待機します。

プロセス間の効率的な通信には、SHM/セマフォやパイプなどのメカニズムを使用する必要があります。

于 2012-12-26T09:41:39.747 に答える