Goアプリケーション性能最適化ガイド
- 高性能なGoアプリケーション開発のための技術資料集
- 高性能API、マイクロサービス、分散システムを開発するエンジニア向けに、実践的なパターンと事例、低レベルの性能インサイトを提供
- GoはC++やRustのように多くの性能調整オプションを提供しているわけではないが、メモリ再利用、割り当て制御、効率的なネットワーキングおよび並行処理など、さまざまな最適化の機会を提供する
- このガイドは、測定可能な性能改善手法に焦点を当て、コア言語機能から高度なネットワーキング戦略まで扱う
これまでに扱った内容
一般的なGo性能パターン
- すべてのGo開発者が知っておくべき中核的な性能パターンを整理した最初の記事
- 主なトピック:
sync.Poolの効果的な使い方
- 不要なメモリ割り当ての回避
- 構造体レイアウトとメモリアラインメントの最適化
- 効率的なエラー処理
- インターフェースによるゼロコスト抽象化
- スライス再利用とインプレースソートの手法
- 実務事例ベースで書かれており、ベンチマークおよびそのまま使えるコード例を含む
今後扱う内容
Goにおける高性能ネットワーキング
- 標準ライブラリおよび外部ライブラリを活用した高性能ネットワークサービス構築について、詳細に分析する予定
- 扱うトピック:
net/httpおよびnet.Connの効率的な使い方
- 大規模な同時接続の処理
- epoll/kqueue、
GOMAXPROCSなどを活用した性能調整
- 負荷テストとボトルネック診断の手法
fasthttpのような低レベルネットワークライブラリを使うべき場面と保守性とのバランス
対象読者
- 本番環境でGoサービスを最適化するバックエンドエンジニア
- レイテンシに敏感なシステムを扱う開発者
- Goへの移行を進めている、または高性能な経路を構築中のチーム
- Goの性能モデルとトレードオフに関心のある開発者
1件のコメント
Hacker News の意見
最初の例であるオブジェクトプールを見て、警告なしで可能な点に驚いた
anyを使っているパフォーマンスガイドは、割り当てを最小化して GC 時間を減らすよう勧めている
さらに...
ゼロコピーは過小評価されている
GOMEMLIMIT は何度も役に立った
最適化が必要なプロジェクトへの興味
オブジェクトプーリングのドキュメントを見て、
syncのようなパッケージをジェネリクス化する計画があるのか気になるGolang が C と構造体アラインメントの点で似ていることに驚いた
「構造体 Data は [1024]int 配列を含んでおり、これは 4KB だ」
sync.Poolを使って自分をだませる