2つのクラスがあります。1つ(A)はいくつかのデータを収集し、もう1つ(B)はデータをTCP/IPクライアントに送信します。このプロセスは非同期で、リフレッシュレートはほぼゼロから数秒です。このアプリケーションにはGUIがないため、多くの組み込みの「onChange」リスナーを使用できないことに注意してください。
通常の状態では、AがBで「send」メソッドを呼び出してデータを渡すようにコードを記述するだけです。ここでは問題ありません。
ここで、Aがデータを収集する速度が重要(リアルタイム)であり、AがBが送信プロセスを完了するのを待つことができないと仮定します(BはUDPではなくTCPを使用することに注意してください)。私がこれを実装した方法は
- AはデータをBのフィールドに配置します
- Bには、データが新しいか現在かをチェックする連続ループがあります。新品の場合は発送します。
送信中にデータが数回更新されても、Aの速度が低下しない限り、問題はありません。送信ごとに新しいスレッドを生成しても、原則としてAの速度は低下しませんが、混乱が生じる可能性があります。 。
Bが同期モードで動作していることがわかります(ただし、Aは動作していません)。また、Thread.sleep()呼び出しを使用したwhileループで実装されています。私の質問は次のとおりです。
whileループの代わりにタイマータスクを使用する必要がありますか?ほとんどの人がThread.sleep()呼び出しを嫌うことは知っていますが、最終的に私が興味を持っているのはCPUを低く保つことだけです。
同期アプローチよりもエレガントな方法はありませんか?場合によっては、Aのデータ更新は約1秒であり、イベントに作用するリスナーがあればいいのですが。このような場合、25msのスリープ時間はサイクルの無駄になります。他の場合、それは非常に速く、私は全く眠りたくないです。
*例:Aが画面からスクリーンショットを送信し、Bがそれらをクライアントに送信していると想像してください。最後の1つだけが重要で、Bはできるだけ速く進みます*
何かアイデアや提案はありますか?できるだけシンプルでCPUを低くしてください
どうもありがとう!