【おーばーへっど】

オーバーヘッド とは?

最終更新:
💡 本来の処理に付随する「余分なコスト」、目的に対して小さいほど効率が良い

処理の本質的な作業以外に必要な付加コスト(時間・メモリ・通信量など)のこと。プロトコルのヘッダー、関数呼び出しの準備、仮想化の管理処理などが代表例。

📌 このページのポイント
オーバーヘッド — 本来の処理以外にかかるコスト 理想 本来の処理(100%) 実際 本来の処理 通信 変換 管理 オーバーヘッド 例: 関数呼び出しコスト、メモリ確保、ネットワーク遅延、コンテキストスイッチなど オーバーヘッドを減らす = システムの効率を上げる
オーバーヘッド(処理の余分なコスト)のイメージ
ひよこ ひよこ
オーバーヘッドって何?
ペンギン先生 ペンギン先生
処理の「本質的な作業」以外にかかるコストだよ。たとえばHTTPで「Hello」の5文字を送るときも、リクエストやレスポンスのヘッダーを一緒に送る必要があるよね。ヘッダーは数百バイトになることもあるから、小さなデータだと付属情報の方が大きくなることさえあるんだ
ひよこ ひよこ
プログラミングでのオーバーヘッドは?
ペンギン先生 ペンギン先生
関数を呼び出すと、引数を渡したり戻り先を覚えたりする準備が必要になるよ。ループ内で小さな関数を大量に呼ぶと積み重なることもあるけど、コンパイラがインライン展開して呼び出し自体を消すこともあるから、実際の影響は計測してみないとわからないんだ。ガベージコレクションで処理が一時停止する時間もオーバーヘッドの一種だね
ひよこ ひよこ
オーバーヘッドを減らすには?
ペンギン先生 ペンギン先生
接続の再利用(HTTP Keep-Aliveやコネクションプール)、まとめて送るバッチ処理、コンパクトなデータ形式の利用などがあるよ。たとえばProtocol Buffersは公式にも「JSONより小さく速い」と説明されている形式なんだ。ただ、どれが効くかは処理内容次第だね
ひよこ ひよこ
会議とか組織運営でもオーバーヘッドって使う?
ペンギン先生 ペンギン先生
使うよ。人数が増えると連絡や調整にかかる「管理オーバーヘッド」が増えるんだ。1対1の組み合わせは n(n-1)/2 で、5人なら10通り、10人なら45通り。人数の2乗に近いペースで増えるんだよ。Amazonが「ピザ2枚で足りる人数」に抑えるTwo-Pizza Teamsを掲げているのも、小さなチームほど協力しやすいという考え方からだね
ひよこ ひよこ
じゃあ、いつもオーバーヘッドを減らすことを考えながら書けばいいの?
ペンギン先生 ペンギン先生
そうとも限らないよ。クヌースは1974年の論文で「小さな効率のことは97%くらいの場面では忘れるべきだ。早すぎる最適化は諸悪の根源だ」と書いた一方で、「重要な3%の機会は逃すべきではない」とも続けているんだ。まず計測してボトルネックを見つけてから減らすのが基本で、N+1問題のように設計段階で避けられる無駄は最初から知っておくといいね
もっと詳しく知りたい人へ

オーバーヘッドとレイテンシ(遅延)は同じ意味?

同じではないよ。レイテンシは「要求してから結果が返るまでの時間」で、その中には本来の処理にかかる時間も含まれる。オーバーヘッドはそのうち「本来の処理以外に上乗せされるコスト」を指すし、時間だけでなくメモリや通信量についても使う言葉なんだ。たとえばTLSの暗号化処理やヘッダーはオーバーヘッドの例だけど、大きなファイルの転送時間そのものは本来の処理だね。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
オーバーヘッドって出てきたら「本来の処理に付随する余分なコスト、通信ヘッダー・GC・関数呼び出しコストなどが例」と思えればOK!
📖 おまけ:英語の意味
「Overhead」 = 頭の上にある・間接費用
💬 会計の「間接費用(overhead cost)」から転用された言葉だよ。コンピュータの分野では「本来の目的とは直接関係しない管理や準備のコスト」を指すんだ

参考資料

← 用語集にもどる