thread.sleep の役割:
(1) CPU 競争戦略
オペレーティング システムには、CPU に関するさまざまな戦略があります。競合、Unix システムはタイム スライス アルゴリズムを使用しますが、Windows はプリエンプティブ アルゴリズムを使用します。
(1).
タイムスライスアルゴリズムでは、すべてのプロセスがキューに配置されます。オペレーティング システムは、各プロセスに一定期間、つまりプロセスの実行が許可される時間をその順序で割り当てます。タイム スライスの終了時にプロセスがまだ実行中の場合、CPU は奪われ、別のプロセスに割り当てられます。タイム スライスの終了前にプロセスがブロックまたは終了した場合、CPU はすぐに切り替わります。スケジューラが行う必要があるのは、準備が完了したプロセスのリストを維持することだけであり、プロセスがそのタイム スライスを使い果たすと、そのプロセスはキューの最後に移動されます。
(2).
プリエンプティブ オペレーティング システムは、プロセスが CPU 時間を取得すると、CPU の使用を放棄しない限り、CPU を完全に占有することを意味します。したがって、プリエンプティブ オペレーティング システムでは、オペレーティング システムはすべてのプロセスが「良好な性格」であると想定し、積極的に CPU を終了することがわかります。プリエンプティブ オペレーティング システムでは、複数のプロセスがあると想定し、オペレーティング システムは、プロセスの優先順位と飢餓時間 (CPU を使用していない時間) に基づいて、それらの合計の優先順位を計算します。オペレーティング システムは、全体的な優先順位が最も高いプロセスに CPU を割り当てます。プロセスが実行を完了するか、アクティブにハングすると、オペレーティング システムはすべてのプロセスの合計優先度を再計算し、最も高い優先度を持つプロセスを選択して CPU の制御を与えます。
(2) 上記によれば、Thread.Sleep() の機能はオペレーティング システムに「今後数ミリ秒以内は CPU 競合に参加しません」と伝えることであると結論付けることができます。
# 次に、2 つの質問があります: (1)。Thread.Sleep(0) の機能は何ですか? Thread.Sleep(0) の機能は、「オペレーティング システムをトリガーして CPU 競合を直ちに再開する 」ことです。競合の結果、現在のスレッドが依然として CPU 制御を取得するか、別のスレッドに置き換えられて CPU 制御を取得する可能性があります。これが、大きなループで Thread.Sleep(0) を記述することが多い理由です。これにより、ペイント スレッドなどの他のスレッドに CPU 制御を取得する権限が与えられ、そこでインターフェイスがフリーズすることがなくなります。
(2). Thread.Sleep(1000) が呼び出されると、このスレッドは 1 秒後に確実に起動されますか? 答えは、必ずしもそうとは限りません。なぜなら、オペレーティング システムに「次の 1000 ミリ秒以内は CPU 競争に参加したくない」と伝えるだけだからです。 1000 ミリ秒が経過すると、その時点で別のスレッドが CPU を使用している可能性があるため、オペレーティング システムは、そのスレッドがハングするか終了するまで CPU を再割り当てしません。さらに、オペレーティング システムがたまたま CPU を割り当てる番になったとしても、この場合、現在のスレッドが必ずしも全体的な優先度が最も高いスレッドであるとは限らず、CPU は依然として他のスレッドによってプリエンプトされる可能性があります。 推奨チュートリアル:「java チュートリアル」
以上がthread.sleep の機能は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。