【おーばーへっど】

オーバーヘッド とは?

💡 本来の処理に付随する「余分なコスト」、少ないほど効率が良い
📌 このページのポイント
オーバーヘッド — 本来の処理以外にかかるコスト 理想 本来の処理(100%) 実際 本来の処理 通信 変換 管理 オーバーヘッド 例: 関数呼び出しコスト、メモリ確保、ネットワーク遅延、コンテキストスイッチなど オーバーヘッドを減らす = システムの効率を上げる
オーバーヘッド(処理の余分なコスト)のイメージ
ひよこ ひよこ

オーバーヘッドって何?

ペンギン先生 ペンギン先生

処理の「本質的な作業」以外にかかるコスト。例えばHTTPで「Hello」という5文字を送るとき、リクエストヘッダー(数百バイト)を一緒に送る必要がある。このヘッダーのコストがオーバーヘッド。本来送りたいデータより付属情報の方が大きい場合すら。

ひよこ ひよこ

プログラミングでのオーバーヘッドは?

ペンギン先生 ペンギン先生

関数を呼び出すたびにスタックフレームを作る・戻り先アドレスを保存するなどのコストがある。ループ内で頻繁に小さな関数を呼ぶと積み重なって影響が出ることも。ガベージコレクションのGCポーズ(GC実行中にアプリが止まる時間)もオーバーヘッドの一種。

ひよこ ひよこ

オーバーヘッドを減らすには?

ペンギン先生 ペンギン先生

接続の再利用(HTTP Keep-Alive・コネクションプール)、バッチ処理(1件ずつ送らずまとめて送る)、軽量なプロトコルgRPC/Protocol BuffersJSONより小さい)、インライン展開(コンパイラが小さい関数を呼び出しなしで展開)などの方法がある。

ひよこ ひよこ

会議とか組織運営でもオーバーヘッドって使う?

ペンギン先生 ペンギン先生

使うよ。「管理オーバーヘッド」という表現があって、チーム人数が増えるとコミュニケーションコストが指数的に増える現象を指す。5人のチームは10通りの1対1の関係があるけど、10人だと45通り。だからAmazonのジェフ・ベゾスは「ピザ2枚で足りないチームは大きすぎる」と言ったんだ。

ひよこ ひよこ

おもしろいたとえだね!プログラミングでオーバーヘッドを意識すべき場面ってどのくらいあるの?

ペンギン先生 ペンギン先生

実は「早すぎる最適化は諸悪の根源」という有名な格言があって、最初からオーバーヘッドを気にしすぎるのもよくないんだ。まずは読みやすいコードを書いて、プロファイリングでボトルネックを特定してから最適化するのが正攻法。ただしN+1問題のように、設計段階で避けるべき明らかなオーバーヘッドパターンは知っておくべきだよ。

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