1

2 つの個別のスレッドと 1 つのキューで構成されるマルチスレッド アプリケーションがあるとします。スレッド 1 は計算を終了し、結果をキューに入れます。一方、スレッド 2 は常にループしており、キューに処理するデータがあるかどうかを確認しています。

何らかの理由でプログラムに障害が発生したり、コンピューターが再起動した場合に備えて、キュー内の値を一時的にディスクに保存するにはどうすればよいですか? 最初のスレッドが終了した後に値を SQLite DB に保存し、スレッド 2 が終了した後に値を削除するのは合理的でしょうか?

SQLiteが実際に最善の解決策である場合、行に処理済みであることを示すフラグを挿入し、30分ごとに別のスレッドを通過させて、フラグが付けられた行を削除するか、その行をすぐに削除する方が速いですか?

4

3 に答える 3

2

ここで自分で転がさないでください。非同期処理ルーチン、再起動可能性、プログラムの障害などは、メッセージ キューで管理するのが最適です。

組み込みのものを Windows に使用したり、Apache Software Foundation のActiveMQでオープン ソースにしたり、 Amazon の Simple Queue Serviceを使用してクラウドで Web サービスを活用したりできます。

ここに行くにはさまざまな方法があります。機能を自分で繰り返す前に、これらのオプションを調べてください。これらの領域での信頼性は、予想以上に困難です。

于 2009-09-29T17:05:23.430 に答える
0

キューをメモリに保存するのではなく、SQL Lite に保存するだけです。スレッド 1 がキューに追加するだけで、スレッド 2 が唯一の読み取りである場合は、スレッド 2 が処理された直後に行を削除するようにします。

もちろん、パフォーマンス上の理由から、キューをチェックする前のスレッド 2 の待機間隔が長ければ長いほど良い結果が得られます。

于 2009-09-29T17:04:33.963 に答える
0

1 つの解決策は、Zero-MQ、RabbitMQ、または (商用) Tibco EMS または Websphere MQ などのキュー サーバーを使用することです。

于 2009-09-29T17:05:53.133 に答える