【おーばーへっど】
オーバーヘッド とは?
最終更新:
💡 本来の処理に付随する「余分なコスト」、目的に対して小さいほど効率が良い
処理の本質的な作業以外に必要な付加コスト(時間・メモリ・通信量など)のこと。プロトコルのヘッダー、関数呼び出しの準備、仮想化の管理処理などが代表例。
📌 このページのポイント
オーバーヘッドって何?
プログラミングでのオーバーヘッドは?
関数を呼び出すと、引数を渡したり戻り先を覚えたりする準備が必要になるよ。ループ内で小さな関数を大量に呼ぶと積み重なることもあるけど、コンパイラがインライン展開して呼び出し自体を消すこともあるから、実際の影響は計測してみないとわからないんだ。ガベージコレクションで処理が一時停止する時間もオーバーヘッドの一種だね
オーバーヘッドを減らすには?
接続の再利用(HTTP Keep-Aliveやコネクションプール)、まとめて送るバッチ処理、コンパクトなデータ形式の利用などがあるよ。たとえばProtocol Buffersは公式にも「JSONより小さく速い」と説明されている形式なんだ。ただ、どれが効くかは処理内容次第だね
会議とか組織運営でもオーバーヘッドって使う?
使うよ。人数が増えると連絡や調整にかかる「管理オーバーヘッド」が増えるんだ。1対1の組み合わせは n(n-1)/2 で、5人なら10通り、10人なら45通り。人数の2乗に近いペースで増えるんだよ。Amazonが「ピザ2枚で足りる人数」に抑えるTwo-Pizza Teamsを掲げているのも、小さなチームほど協力しやすいという考え方からだね
じゃあ、いつもオーバーヘッドを減らすことを考えながら書けばいいの?
もっと詳しく知りたい人へ
オーバーヘッドとレイテンシ(遅延)は同じ意味?
同じではないよ。レイテンシは「要求してから結果が返るまでの時間」で、その中には本来の処理にかかる時間も含まれる。オーバーヘッドはそのうち「本来の処理以外に上乗せされるコスト」を指すし、時間だけでなくメモリや通信量についても使う言葉なんだ。たとえばTLSの暗号化処理やヘッダーはオーバーヘッドの例だけど、大きなファイルの転送時間そのものは本来の処理だね。
まとめ:ざっくりこれだけ覚えればOK!
オーバーヘッドって出てきたら「本来の処理に付随する余分なコスト、通信ヘッダー・GC・関数呼び出しコストなどが例」と思えればOK!
📖 おまけ:英語の意味
「Overhead」 = 頭の上にある・間接費用
💬 会計の「間接費用(overhead cost)」から転用された言葉だよ。コンピュータの分野では「本来の目的とは直接関係しない管理や準備のコスト」を指すんだ