スレッドの実行順序を予測不可能にする原因は何ですか?スケジューラはある時点で乱数を使用するか、システムリソースをチェックするか、またはどのスレッドが十分に待っていたかを確認しますか?スレッドの実行順序を予測不可能にする原因は何ですか?
答えて
スケジューラは、通常、OSのスケジューラです。マシン上の他のプロセスが何をしているのか、ハードウェアが何をしているのか(割り込みなど)など、多くの要素の影響を受けます。OSによっては、乱数が含まれることもありますが、それは、複数の可変時間間隔が重なり合う可能性があるという予測不可能な方法です。
JVMはOSをOSにスケジューリングし、OSスケジューラがスレッドをスケジューリングするか、JVMがスレッド自体のスケジュールを決定することがあるので、最初の違いは2つのマシンで予測できない動作です同じ状況)は、スレッドがJVMかOSによってスケジュールされているかどうかにかかわらず、本当に確実ではありません..... さらに、要因の数があり、スレッドの優先度は1つの要素です(優先度を設定できます)。もう一つの要因....その乱数が含まれている可能性は低いです。
スケジューラで乱数を使用すると、OSのクリティカルセクションに不必要なオーバーヘッドが発生するため、少なくともメインストリームOSではそれが原因ではありません。
スレッドは、通常、ブロックするOSコールが発生するか、割り込みが発生するまで、またはタイムスライスが期限切れになるまで実行されます(これは最終的にはタイマ割り込みです)。 2つのスレッドが常に決定論的な順序でブロックするように注意深く構築することができたとしても、後の2つのエフェクトがいつ発生するかを正確に制御することはできません。アプリケーション内のスレッドが実行される順序は、最終的にアプリケーション外のイベントの影響を受けます。
最近のオペレーティングシステムでは、Preemtive multitaskingと呼ばれるものが使用されます。これは、システム上の各プロセスにCPU時間のスライスを保証します。それぞれのプロセスを中断し、次のプロセスを中断させるためのさまざまなルールがあります。このため、マシン上にプロセスごとに1つのCPUを必要としません。
これはランダムではありませんが、一般的には予測できません。
その他の質問は、技術的な詳細で良い点を作る、しかし:正確には
、Javaでスレッドのスケジューリングがかなり効率的ロックによって制御され、待機/通知/のnotifyAll、睡眠方法や他の同時実行制御。 アプリケーション実行中のこれらの時刻に限り、が存在しない場合は、異なるスレッドの実行順序はのままで、定義されていません。。
主な理由は、おそらく異なるハードウェア/ OSシステムでのJavaの移植性を容易にするためです。開発者として、上記の並行処理コントロールを使用してアプリ内の異なるスレッドを実行する順序を定義していない場合は、それを気にする必要はなく、任意の方法で問題が発生することはありませんJVMによって選択されます。
- 1. スレッドの実行が予測不可能
- 2. ループは予測可能な順序で実行されますか?
- 3. Tcl配列名に対する予測可能な順序?
- 4. マルチスレッドは、「予測不可能」行動
- 5. R Caret:予測するクラスの因子順序の選択
- 6. スレッドの実行順序は何ですか?
- 7. WS_TABSTOPがウィンドウ描画順序に影響する原因は何ですか?
- 8. 実行中のスレッドで "java.lang.OutofMemoryError"の考えられる原因は何ですか?
- 9. 予測不可能なダブル
- 10. テンソルフロー予測の順序
- 11. s3ファイルのダウンロードは予測不可能
- 12. ジャバスクリプトオブジェクトのフィールドの順序は、それらをループするときに予測可能ですか? PHPで
- 13. 改行の原因は何ですか?
- 14. Cでのカンマ演算子と代入による評価の順序は予測可能ですか?
- 15. BigDecimal(double)コンストラクタの予測不可能性
- 16. アンカーへのスクロールが予測不可能
- 17. キャプティブポータル:AJAX投稿は非常に予測不可能です
- 18. Javaのスレッド可視性問題の根本原因は何ですか?
- 19. 予測不可能なアクセス制御 - 許可 - 起源行動
- 20. surefire-pluginがテストケースを実行する順序は何ですか?
- 21. 原因は何ですか
- 22. スレッドの実行順序のJava
- 23. Delphi Prismでのソースファイルの合併または実行の順序を決定する要因は何ですか?
- 24. WindowsでPATH内の実行可能ファイルを検索する相対的な順序は何ですか?
- 25. アクセス不能な例外を引き起こす原因は何ですか?
- 26. 項目の順序を示すノックアウト観測可能なフィールド
- 27. Citrusテストケースでのコード実行の順序は何ですか
- 28. サイズの不一致の原因は何ですか?
- 29. Railsの「不明なOID」エラーの原因は何ですか?
- 30. "不明なクロムエラー:-400"の原因は何ですか?
すべての現在のメインストリームJVMは、スケジューリングを完全にOSに委ねます。いくつかの古いJVMは緑色のスレッドを使用していましたが、その場合は*すべてのスレッドのスケジューリングがJVMによって管理されていました。 –
@MichaelBorgwardt私はJava 6のためのSCJPの本は、この説明を含める必要があると思います。とにかく更新のおかげで – Zohaib