2017-02-20 10 views
1

2つのプロセスがある場合、なぜビジー待機がコンテキストスイッチを回避するのですか?そして、このシナリオでコンテキストスイッチがCPU時間を浪費するよりも安価なのはなぜですか?プロセスの代わりにスレッドがあれば何が変わるのですか?ビジー待機とコンテキストスイッチ

ありがとうございます!

答えて

2

ビジーウェイトがを待っているコンテキストスイッチ

がビジー避ける理由はない回避のコンテキストスイッチを行います!コンテキストスイッチは、スケジューラが他のプロセスにCPUを実行させることを決定するプロセスです。ビジー・ウェイティングは、プロセスをループして何かを待っておくためのテクニックです。すなわち、2つのプロセスが同時にいくつかの共有データを変更するのを防止する。あるプロセスは、他のプロセスが終了したことを「知らせる」までループします。これは、プロセスが時間のバーストを費やさずに何も処理を行わないため、CPU使用率が低下するため、同期の悪い方法です。

そして、なぜコンテキストスイッチが

CPU時間を無駄に依存するよりも安価です!クリティカルセクション内のコードが短い場合、ビジー待機はコンテキストスイッチより速い場合があります。プロセスはシグナルを無視することができ、このようにして自発的にCPUがCPUから離れるまでCPU上で実行されます。 注:すべての信号を無視することはできません。

プロセスの代わりにスレッドがある場合はどうなりますか?

これはOSに依存する可能性があり、OSがスレッドを認識しているため、これはあまりにも有益です。

+0

私はあなたの返事で唯一の問題がある、ビジー待機は悪い同期方法ではない、それはユースケースに依存します。イベントが長すぎない場合は、カーネル・イベントの代わりにビジー・ウェイティングを使用することをお勧めします。カーネル・オブジェクトによってオーバーヘッドが大きくなり、イベント(またはシグナリング)が非常に短時間実際には待機がより良いアプローチですが、ビジー待機中に費やされた時間がこのオーバーヘッドよりも小さい場合は、ユーザーモードとカーネルモードの切り替えが過度になる可能性があります。確かに@EduG。 –

+0

私はそれを私の答えで述べました。場合によっては、ビジー状態の待機がコンテキストスイッチを通過するよりも良い場合があります。 –

関連する問題