素朴な実装手法とその問題点
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/06 17:25 UTC 版)
「ビジーウェイト」の記事における「素朴な実装手法とその問題点」の解説
最も単純な実装は「何もしない (nop : No OPerationの略)」処理を繰り返し実行することにより、一定の時間を経過させるという方法になる。CPUはnop命令に出会うとCPU固有の一定時間「なにもしない」ため、実行するnop命令の回数を調整することで狙った時間を経過させることができる。一般にnop命令の繰り返し実行のためにループ構造を使用し、ループの繰り返し数によってnop命令の実行回数を指定する。 しかし、この方法では、CPUの処理速度が異なることによってnop命令1つが消費する時間が異なる場合、ある回数のループによって経過させる時間は変化してしまう。特にデバイスとの入出力処理には、デバイスとのコマンド送受信やデータ処理のタイミングが重要であることがあり、素朴なビジーウェイトをタイミング調整に使用していると、動作が不安定になることもある。速度(クロック周波数)の異なる互換CPUをサポートしたい場合は、プログラムの開始時にnopを用いたループの実効速度を計測し、ビジーウェイト部分で使用する適切なループ回数を計算してセットする等の対処法もあるが、これはプログラム実行中にクロック周波数が常に同じ値に固定されていることを前提としており、負荷に応じて動的にクロック周波数が変動するようなCPUには対応できない。 SMPシステム向けのオペレーティングシステム内のスピンロックの実装などのような特定の状況下において、ビジーウェイトは有効かつ実用的な手法である。しかし、一般にはビジーウェイトはCPU時間を何もさせずに浪費するという観点から推奨される方法ではない。CPU時間を費やして待つ時間があれば、他のスレッドを動作させるほうが効率的である。
※この「素朴な実装手法とその問題点」の解説は、「ビジーウェイト」の解説の一部です。
「素朴な実装手法とその問題点」を含む「ビジーウェイト」の記事については、「ビジーウェイト」の概要を参照ください。
- 素朴な実装手法とその問題点のページへのリンク