リアルタイムソフトウェアでは、機械に対するネットワーク要求または制御操作は、日々のソフトウェア操作に比べて時間がかかります。たとえば、ステップモータを特定の位置に進めるように指示するには数秒かかりますが、通常の操作には数ミリ秒かかります。一般的なステップモーターの進角は、n
ミリ秒で、最大距離になるのは、m
ミリ秒です。
アグレッシブタイムアウトはn
を計算し、おそらく10%の小さなファッジファクタを追加し、その時間にゴールに達していない場合はすぐに失敗します。あなたが述べたように、積極的なタイムアウトはリソースを解放することを可能にします。 m
+ epsilon
の非攻撃的なタイムアウトは、はるかに遅く失敗し、不必要にリソースを縛ります。
非同期ソフトウェアの世界では、成功と失敗の間にいくつかの選択肢があります。非同期操作では、n
に10%を加えた値を計算し、進行状況バーを表示して(ユーザーからのフィードバックが必要な場合)、推定された目標の終了に向かって進捗を表示することがあります。タイムアウトに達すると、プログレスバーがいっぱいになりますが、パルスが長くなったり色が変わったりして、予想以上の時間がかかっている可能性があります。 m
ミリ秒後にステップモーターが目標に達していない場合は、失敗を通知できます。
フィードバックが重要でない場合は、確かにm
とepsilon
をタイムアウトとして使用することができます。
タイムアウトは必要ありません。たとえば、あなたがネットワークで何かをしていると仮定しましょう。それが非同期で非ブロッキングであるかどうかは関係ありません。あなたは結果を知ることはできません。だから、物事が成功したと見なされる場所に窓を開けたいと思っています。 –