9章データ駆動ボトルネック分析

プログラマーは通常、コードのどの部分が主にリソースを消費しているかを推測するのが苦手です。 プログラマーは、あるコードを修正することで大幅な時間短縮を期待していたのに、そのコードがほとんど実行されていなかったために、まったく効果がなかったということはよくあることです。

Jon Louis Bentley, Writing Efficient Programs

Goプログラムの効率を向上させる重要なステップのひとつは、改善したいレイテンシーやリソースの使用量の主な原因がどこにあるのかを知ることです。 したがって、最適化によって最大の価値を得るためには、まずもっとも寄与している部分(ボトルネックまたはホットスポット)に焦点を当てるよう意識する必要があります。

ソフトウェア開発の経験を活かして、コードのどの部分がもっとも計算コストが高いか、あるいは遅すぎるかを推定することは非常に魅力的です。 過去に似たようなコードの断片が効率性の問題を引き起こしているのをすでに見たことがあるかもしれません。 たとえば、「ああ、Goで連結リストを扱ったけど、すごく遅かったから、きっとこれだ!」や、「ここで新しいスライスをたくさん作っていて、ここがボトルネックだと思うから、いくつか再利用しよう」といった具合です。 私たちは、それが引き起こしたかもしれない痛みやストレスをまだ覚えているかもしれません。 しかし、残念ながら、そのような感情に基づく結論は間違っていることが多いのです。 プログラム、ユースケース、環境はそれぞれ違います。 そのソフトウェアは、他の場所に問題があるのかもしれません。 その部分をすばやく確実に明らかにし、最適化の努力をどこに費やすべきかを知ることが不可欠なのです。 ...