
CA.go #2 で golang.org/x/sync について喋りました #ca_go
CA.go #2 - connpass にて golang.org/x/sync 以下にある 4 つのパッケージを用いて効率的に非同期処理をする技術についてお話しました。
登壇内容
golang.org/x/sync による効率的な非同期処理 と題し、 golang.org/x/sync の使い所と雑感、注意点について紹介しました。
第一回で紹介した sync.Pool と同じく “明日から使える” 系です。
内容はスライドを参照いただければ問題ないかと思いますが、概要としては以下です。
golang.org/x
は Go のプロジェクトではあるが標準パッケージとは別で管理されているライブラリ群golang.org/x/sync
は標準パッケージのsync
やsync/atomic
に入れる前のおためし版的な扱いっぽいsyncmap
は排他制御付きのmap
。 Go 1.9 から標準パッケージの仲間入りerrgroup
はsync.WaitGroup
みたいに全非同期処理が終わるまで wait するやつ。エラーが起きた場合、context
で cancel させて始めのエラーを返すsemaphore
は重み付きの並列数管理。context
に対応しているので待ち時間のタイムアウトもできるsingleflight
は並列に叩かれる処理で使うもので、1 つ目以外の処理リクエストは待たせておいて、1 つ目の処理が終わったら待たせていた他の処理リクエストにも戻り値を配ってくれるやつ。キャッシュ切れ時の origin リクエストに使ったりすると良さそう
どれも chan を使って自作できそうな(今までは自作していた)ようなものではありますが、特にトラブル時の問題切り分けを煩雑にしないためにも積極的に利用していきたいところです。
特にマイクロサービス構成の動画サービスでは各所で重いデータのリクエストや更新管理の難しいキャッシュデータが生まれがちなので、 singleflight
は今後ぜひ使っていきたいなーと思っております。
スライドには使用イメージとしてサンプルコードも載せてありますので、ぜひ見ていただけると嬉しいです。
スライド制作
以前から使っている @ahomu さん製の Talkie をラップした、 talkiego で作りました。今回のスライドを作るにあたって highlight.js の Go 対応と、 serve
コマンドのオプション指定機能を追加しました。
カスタムテーマは未対応ですが、カスタム CSS は対応してみたのでとりあえず色々とカスタムはできるはず。とはいえ自分はデフォルトでしか使っていないです。
お礼
前回に引き続き、今回も主催兼、司会兼、第一登壇者で参加させていただきました。登壇タイトルの更新が遅かったり、登壇者の入れ替えがあったり、ご迷惑をおかけいたしました。
ポツポツと雨が降っているにも関わらず多くの方々に足を運んでいただき嬉しく思っております。ぜひ今後も有益な情報を提供できるよう尽力してますので、今後とも宜しくお願いいたします。
次回からは登壇からは身を引いて、運用に回ろうかなーと思っております(といいつつまた出てくるかもです)。
また 2,3 ヶ月後に第三回を実施したいなーと思っています。よろしくお願いいたします!