2017-09-05 13 views
0

ブロッキングの世界では、高速で障害を起こし、基盤リソース(セクション5.1のhttps://pragprog.com/book/mnee/release-it)をリリースするために、積極的なタイムアウトを設定することを強く推奨します。リアクティブプログラミングでのアグレッシブタイムアウトの利点利点

非同期/非ブロッキングの世界では、要求はメインスレッドをブロックしておらず、リソースはすぐ後で処理できるようになります。タイムアウトはまだ必要ですが、積極的な値を設定することはまだ理にかなっていますか?

+1

タイムアウトは必要ありません。たとえば、あなたがネットワークで何かをしていると仮定しましょう。それが非同期で非ブロッキングであるかどうかは関係ありません。あなたは結果を知ることはできません。だから、物事が成功したと見なされる場所に窓を開けたいと思っています。 –

答えて

1

リアルタイムソフトウェアでは、機械に対するネットワーク要求または制御操作は、日々のソフトウェア操作に比べて時間がかかります。たとえば、ステップモータを特定の位置に進めるように指示するには数秒かかりますが、通常の操作には数ミリ秒かかります。一般的なステップモーターの進角は、nミリ秒で、最大距離になるのは、mミリ秒です。

アグレッシブタイムアウトはnを計算し、おそらく10%の小さなファッジファクタを追加し、その時間にゴールに達していない場合はすぐに失敗します。あなたが述べたように、積極的なタイムアウトはリソースを解放することを可能にします。 m + epsilonの非攻撃的なタイムアウトは、はるかに遅く失敗し、不必要にリソースを縛ります。

非同期ソフトウェアの世界では、成功と失敗の間にいくつかの選択肢があります。非同期操作では、nに10%を加えた値を計算し、進行状況バーを表示して(ユーザーからのフィードバックが必要な場合)、推定された目標の終了に向かって進捗を表示することがあります。タイムアウトに達すると、プログレスバーがいっぱいになりますが、パルスが長くなったり色が変わったりして、予想以上の時間がかかっている可能性があります。 mミリ秒後にステップモーターが目標に達していない場合は、失敗を通知できます。

フィードバックが重要でない場合は、確かにmepsilonをタイムアウトとして使用することができます。