11

通常、意図しない種類の無限ループが原因で CPU 使用率が高くなることはわかっています。でも、なぜかよくわかりません。誰か私にそれを説明できますか?

4

4 に答える 4

19

CPU は、そのループ (決して終了しない) を実行している間、他に何もできません。プリエンプティブなマルチタスキング システムを使用している場合でも (無限ループが独自のプロセスまたはスレッドを永久に詰まらせないようにするため)、ループは OS のプリエンプティブ スケジューラがタイム スライスを渡すたびにタイム スライスを「消費」します。次のスライスのための CPU -- 何もせず、毎回 1 つのスライスに相当する CPU 時間を消費するため、そうでなければ有用な作業を行っていた可能性のある他のすべてのスレッドに多くの CPU が失われます。

于 2010-05-17T01:02:55.700 に答える
8

無限ループは、実行中の他のコードと同じです。コンピューターは、無限ループが多くの反復を必要とする複雑な計算ではないことを知りません。

無限ループに、時間を OS に戻すシステム関数を呼び出すコードが含まれていない限り、OS はそれを何かに積極的に取り組んでいるプロセスとして扱い、実行する時間を与えます。他のプロセスが実行されていない場合、CPU の 100% を消費します (シングル コア システム上)。

于 2010-05-17T01:02:50.337 に答える
6

無限ループ自体はまったく問題ありません。ユーザーと対話するほとんどのアプリケーションは無限ループです。彼らは繰り返しユーザーを待ち、それに基づいて行動し、サイクルを再び実行します。オペレーティング システム自体が無限ループです。これらの種類の無限ループは、何かを無期限に繰り返すにもかかわらず、定期的にユーザーにとって有用なものを出力するため、「生産的」であると言われています。

あなたの懸念は、非生産的な無限ループにあると思います。しかし、これらが問題である理由は明らかです。それらには、生産的なループのすべての欠点 (電力の消費、CPU 時間の使用など) があり、利点はありません。それらは有用なものを何も生成しません。

于 2010-05-17T01:14:45.403 に答える
0

あなたはおそらく停止とキャッチファイアの指示を参照しています

于 2010-05-17T02:35:46.700 に答える