問題タブ [fail-fast]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - プロセスがシャットダウンしたときに「参加」を無効にする
multiprocessing
Pythonモジュールがjoin()
親プロセスの子プロセスのシャットダウンを呼び出して待機しようとするのを防ぐ方法はありますか?
2010-02-18 10:58:34,750 INFO calling join() for process procRx1
最終的に試行をあきらめる前に数秒待つのではなく、送信したプロセスをSIGTERM
できるだけ早く終了する(つまり「高速で失敗する」)ようにしjoin
ます。
明確化:私は「子プロセス」の束を作成する「中央プロセス」を持っています。プロセスツリー全体を停止するために、任意のプロセスからの「SIGTERM」シグナルをクリーンに処理する方法を探しています。
java - Java コンテナはフェイルセーフ イテレータを提供しますか
これが私の問題です:
このデータ構造の が存在する間に が変更さjava.util.ConcurrentModificationException
れるため、このコードは をスローします。java-doc によると、このコンテナーはフェイルファスト イテレーターのみを提供します。Vector
listeners
Iterator
その「ライブ」中に要素が削除された場合、無効にならない(フェイルファストではない)を提供する、またはJavaIterator
のような標準コンテナを乗り越える可能性はありますか?Vector
List
Iterator
Iterator
std::list
C++の場合と同じように動作する必要があります。そこでは、現在のイテレータが削除されていても、イテレータは常に有効です。イテレータがリスト内の次の要素に設定されるよりも。
erlang - フェイルファストスタイルのプログラムがディフェンシブスタイルのプログラムよりも短いのはなぜですか?
Erlangのような言語でのフェイルファストスタイルのプログラミングが、他のほとんどの言語で見られる防御スタイルよりもはるかに短いプログラムになる方法について読んだことがあります。これはすべてのタイプのプログラムに対して正しいですか、そしてこれの理由は何ですか?
c# - 防御的プログラミング手法を組み合わせるには?
私があなたに尋ねたい質問は非常に広いですが、同時に非常に具体的です。まず、.net 環境に適用できる回答に主に関心があると言わざるを得ません。
うーん、自分が作るコードのレベルを上げたい。今では主に TDD と静的コード分析を使用して、コードが正しいことを確認しています。最近、コード コントラクトに関する Dino Esposito のスピーチを聞いたので、他の手法と組み合わせて使用したいと考えています。Dino を聴きながら、Debug.Assert()
とも思い出しましたTrace.Assert()
。
具体的には、いくつかの質問をします。
- コントラクトと単体テストを相互に補完するには、どのように記述すればよいですか?
- すべてのメソッドでコード コントラクトを使用する必要がありますか?それともパブリック メソッドでのみ使用する必要がありますか?
- の使用を防止する必要があり
Debug.Assert()
ますか? それらを使用してもよいのはいつですか?(たとえば、.net の不変条件はパブリック メソッド/プロパティの終了時にのみチェックされることに注意してください。したがって、単純な方法でメソッドの途中でいくつかのチェックを行っても問題ありAssert()
ませんか?) - 百聞は一見に如かずというわけで、これらすべての手法が適切に使用されているオープン ソース プロジェクトをお勧めしていただけませんか?
java - Serializable オブジェクトが本当にシリアライズ可能かどうかを検出しますか?
Serializable
実装するオブジェクトが構築時に実際にシリアル化可能かどうかを判断するための組み込みメソッドがありますか?または誰かが良いパターンを教えてくれますか? 副作用のないものが必要なので、オブジェクトを実際にシリアル化するアプリケーション サーバーのメソッドを呼び出すだけではいけません。
コンストラクターの署名を変更せずに、コンストラクターで利用できるものを好むでしょう。ただし、これらのオブジェクトのファクトリを構築する方が簡単であれば、気にしません。
編集
この質問の 受け入れられた回答によると、作成時にオブジェクトのシリアル化可能性をテストするために、独自のObjectOutputStream
->パイプを作成できるようです。ObjectInputStream
java - iterator.remove を使用してもエラーが発生しないのはなぜですか?
を使用すればIterator.remove()
、すべて問題ありません。を使用するArryaList.remove()
と、常にエラーが表示されますjava.util.ConcurrentModificationException
。
誰でも理由を指摘できますか?
java - フェイルファストに関するこのコメントを理解できません
JDK 1.6 の HashSet.java には、HashSet の反復子のフェイルファスト プロパティに関するコメントがいくつかあります。
このクラスの iterator メソッドによって返される反復子はフェイルファストです。反復子の作成後に、反復子自体の remove メソッド以外の方法でセットが変更されると、Iterator は ConcurrentModificationException をスローします。したがって、同時変更に直面した場合、反復子は、将来の不確定な時点で恣意的で非決定論的な動作を危険にさらすのではなく、迅速かつ明確に失敗します。
上の段落はかなり単純明快なので理解できますが、次の段落は理解できません。フェイルファスト イテレータが失敗する可能性があることを示す簡単な例があれば、それを理解できるかもしれません。
イテレータのフェイルファスト動作は保証できないことに注意してください。一般的に言えば、同期されていない同時変更が存在する場合にハードな保証を行うことは不可能であるためです。フェイルファスト イテレーターは、ベスト エフォート ベースで ConcurrentModificationException をスローします。したがって、その正確性をこの例外に依存するプログラムを作成するのは誤りです。反復子のフェイルファスト動作は、バグを検出するためだけに使用する必要があります。
java - フェイルファストイテレータ
私はこの定義を取得します:名前が示すように、イテレータは、反復が開始されてからコレクションの構造が変更されたことに気付くとすぐに失敗します。
反復が始まってからどういう意味ですか?Iterator it = set.iterator()の後、このコード行を意味しますか?
design-by-contract - 契約による設計とフェイル ファスト
フェイルファスト -
フェイルファストは、障害への応答に関するシステムまたはモジュールの特性です。フェイルファスト システムは、障害または障害につながる可能性のある状態をインターフェイスで即座に報告するように設計されています。通常、フェイルファスト システムは、欠陥のある可能性のあるプロセスを続行しようとするのではなく、通常の操作を停止するように設計されています。このような設計では、多くの場合、操作のいくつかの時点でシステムの状態がチェックされるため、障害を早期に検出できます。フェイルファスト モジュールは、エラーを処理する責任を負いますが、エラーを検出することはせず、次に高いシステム設計レベルに渡します。
契約による設計 -
契約による設計 (DbC) は、契約プログラミング、契約によるプログラミング、および契約による設計プログラミングとも呼ばれ、ソフトウェアを設計するためのアプローチです。ソフトウェア設計者は、事前条件、事後条件、および不変条件を使用して抽象データ型の通常の定義を拡張する、ソフトウェア コンポーネントの正式で正確かつ検証可能なインターフェイス仕様を定義する必要があると規定しています。これらの仕様は、ビジネス契約の条件と義務に関する概念的な比喩に従って、「契約」と呼ばれます。
私の質問は、両方の用語の類似点と相違点は何ですか。どちらもソフトウェア設計用だと思います。
フェイル ファストはシステム障害への対応であり、契約による設計はシステムの保証、最小限、期待です。
しかし、実際にそれらの両方の違いと類似性をどのように定義すればよいでしょうか。
助けてくれてありがとう.!