
CA.go #1 で sync.Pool について喋りました #ca_go
1 ヶ月ほど前になってしまいましたが、 CA.go #1 - connpass にてメモリ効率を瀑上げする sync.Pool について話をしてきました。
登壇内容
sync.Pool で瀑上げメモリ効率 と題し、 sync.Pool の利点と実装における注意点を紹介してきました。
“明日から使える sync.Pool” を目指したのですが、登壇後にいただいたアンケートでも概ね好評だったようで良かったです。
内容はスライドを参照いただければ問題ないかと思いますが、概要としては以下です。
- sync.Pool はいわゆるメモリプールの仕組み。 Go 1.3 から標準パッケージに入った
- メモリを捨てずに再利用することで新しくメモリを確保しなくて済む
- 大きなメモリ確保が必要なループを回しても、 sync.Pool を使えばアロケーションが走らないので高効率
- 使いまわすので値が入ったままになる。初期化処理を工夫する必要がある
- interface{} で扱うので wrapper を用意したほうが良さそう
スライドにはベンチマークも載せてありますが、シンプルに使えてかなりの効果が出ました。
例えば動画サービスなら HLS の Playlist データで用いる配列や、パケット処理などで便利に使えます。
スライド制作
以前から使っている @ahomu さん製の Talkie をお借りしました。いつもありがとうございます。
Talkie はソースを丸っと落として index.html を編集する必要があるため、 Markdown だけ記述すればコマンド一発で起動できる talkiego を作りました。ペライチ資料作るのにも便利。今度ブログ書きます。
お礼
今回は主催兼、司会兼、第一登壇者ということでとても緊張していたのですが、会場の雰囲気が優しくて助けられました。ありがとうございます。
当日のお昼が記録的な荒天でキャンセルが相次ぐ中、足を運んでいただき本当に感謝しております。
次回は 8 月中には開催できたらいいなーと思っているので、またよろしくお願いします。