1

単一のスレッド化されたプログラムで並行して実行されている多くの HPC ジョブのステータスを監視しようとしています。OnJobState によって発生したイベントをサブスクライブしています。3 つのジョブだけを監視すると、イベントの状態の変化が失われ、ジョブが実行中のままになります。 .

すべてのイベントをキャッチするには、ジョブごとにスレッドが必要だと思いますが、単一のスレッド プログラムでのイベント サブスクリプションの制限に関する情報が見つかりません。

.net プラットフォームはこれをすべてキューに入れると思っていましたが、そうではないようです。

4

2 に答える 2

0

イベントはデフォルトで同期されます。つまり、イベントを発生させたオブジェクトは、すべてのイベント ハンドラーが作業を終了した後にのみ実行を継続します。イベント ハンドラーは、イベントを発生させるオブジェクトと同じスレッドで実行されます。これは、次の結論につながります。

  1. イベントが次々に発生するため、.NET フレームワークは何もキューに入れることができません。
  2. イベント ハンドラで負荷の高い計算を行うべきではありません。イベントが立て続けに発生する場合は、中程度のコンピューティングであっても避ける必要があります。
  3. キューイングが必要な場合は、自分で実装する必要があります。イベント ハンドラーで、新しいイベントに関する情報をスレッド セーフ キューに追加し、このキューを別のスレッドから処理します。
于 2011-10-11T13:25:43.190 に答える
0

HPC に関する混乱を取り除くために、この質問をより一般的なものにしました。イベント ハンドラーの実行方法を制御できないように見えるため、スレッド セーフにする必要があります。

于 2011-10-12T12:08:58.757 に答える