GREE Tech Talk #05 ご来場ありがとうございました

こんにちは。開発企画室の佐島です。

はじめに

5月14日(水)、グリー主催の技術勉強会GREE Tech Talkが開催されました。
5回目となる今回のテーマは「並行/並列プログラミング」。
少々マニアックなテーマで集客に不安があったものの、結果的に200名近い技術者の方々にご来場頂くことができました。
お忙しい中お越し頂いたみなさま、本当にありがとうございました。

セッション概要

当日行われたセッションについて簡単にご紹介させていただきます

冒頭、弊社CTOのふじもとがご来場頂いたみなさまに並行、並列、分散プログラミングがテーマになっている「プログラミングの魔導書 Vol.3」を持っているかどうか聞いたところ、半数ぐらいの方がお持ちでした。
残り半数の人達に売れるチャンス!というのは今回の目的ではありませんが、来場者の関心の高さが伺えたところでセッションがスタートしました。

『ここから始める並行プログラミング』高橋 晶(株式会社ロングゲート)

cpp_akira

まず最初に、魔導書の著者であり編集長でもある高橋さん(@cpp_akira)より、並行プログラミングの入門的なお話をして頂きました。
並行プログラミングが難しいのは、OSのスケジューラによって行われるコンテキストスイッチを制御出来ないため、実行結果が一意に定まらない「非決定性」という性質にあるとのこと。
この非決定性を飼いならすために、排他制御をしたり、タスクの独立性を高めたり、デザインパターンを適用したりする必要があるということで、それぞれの詳細について解説頂きました。
最後に、プログラミングが進化しても並行プログラミングは避けて通れないので、原理原則に従ったプログラムを心がけることが重要です、ということでお勧め書籍をご紹介頂きました。
スライド:ここから始める並行プログラミング

『プロセスデザイン』幾田 雅仁(株式会社 gumi)

@cooldaemon

続いてgumiの幾田さん(@cooldaemon)。
並行プログラミングの入門的な話としてプロセスデザインについてお話頂きました。
まずはプロセスデザインの話。並行はメンテナンス性が悪いし、バグを生みやすいし、障害が発生すると原因を追求するのが辛いと言うイメージがあるが、それはプロセスデザインが崩壊しているから複雑でメンテナンス性が悪いだけで、プロセスデザインを意識してコードを書くと、並行・並列で書いたからこそ堅牢になる、と説明がありました。
続いて監視ツリーの話。Erlang, Scala, Golang、番外編としてnode.jsと複数言語による解説を、アニメーションを使って、非常に丁寧でわかりやすく説明して頂きました。
最後に、一つの言語を深く勉強することは良いが、固執しすぎると他の言語をdisるようになりがちなので、比較して優劣をつけるのではなく、組み合わせを考える癖をつけるのが良いという複数言語を学ぶ利点を説明頂きました。
なお「すごいErlangゆかいに学ぼう!」という書籍が初夏に出るみたいですのでそちらも非常に楽しみです。
スライド:後日公開予定

休憩

ここで一旦休憩です。
当初20分間の休憩でプログラムを組んでいたのですが、次のスピーカーである@kumagiさんが1時間分の資料を用意してこられたため、少しでも発表時間を確保すべく5分早めての開始となりました。

『STMの設計と進化』熊崎 宏樹(日本電信電話株式会社)

@kumagi

ということで熊崎さん(@kumagi)。
126ページにもおよぶスライドをどこまで喋り切れるかというスリリングな発表となりました。
表紙に「聴講者想定レベルJava初級者」と書かれている通り、STMの基礎知識をしっかり説明された上で実装方法の解説に入られたので、大変わかりやすく流れるような導入でした。
実装の話は、まずJavaのsynchronizedがなぜダメなのかについて解説があった後、本日の発表のポイントである「2 Phase Lock」が、人類が発明した並行世界を縛る最強の鎖ということで登場します。
早速2 Phase Lockを使ったSTMを作ってみるも遅いので、パフォーマンスを出すための最初の解決策としてVersioned Lockが発明されSTMが最初の進化を遂げたという説明がありました。
さらに、Versioned Lockだとどうして速くなるのかについて、CPUキャッシュの仕組みを解説頂くことで、書き込まなければ高速に動作するということの理解が深まりました。
しかしこの方法は2 Phase Lockの砦から出てしまう行為で、結果ゾンビトランザクション問題を生み出すのですが、それを回避する方法として人類はGlobal Clockという方法を新たに発明します。
さらに進化は続き、、、というところで無念のタイムアップ。続きはスライドでお楽しみ下さい。

スライド:STMの設計と進化

『サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜』池原 潔(グリー株式会社)

ikehara

最後に弊社エンジニアの池原が登壇しました。
まずGREEで実際に活用している並行/並列の事例としてマルチスレッドを用いたサーバミドルウェアであるFlareやPrimDNSを紹介させて頂きました。
グリーではHaskellのSTMを活用していますので、具体的な利用例としてKVS自動運用システムやゲートウェイサーバの実装について説明させて頂きました。
また、C++とHaskellで性能評価を行い、ほぼ同等の性能が出たことなどを紹介し、STMを使うならHaskellがお勧め、サーバを書くならHaskellがお勧めという所を強調し発表を終わらせて頂きました。
スライド:サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜

写真撮影

all members

イベント終了後に登壇者の方々で記念撮影をさせて頂きました。

最後に

改めまして、お忙しい中ご来場頂きましたみなさま、並びに快く登壇をして頂きましたスピーカーのみなさま、本当にありがとうございました。
イベント終了後の懇親会でも活発な意見交換が行われ、みなさんと一緒に並行/並列プログラミングについて考える楽しい日にすることができたのではと思いました。
GREE Tech Talkは今後も活動を続けて参りますので、どうぞよろしくお願いします。

参考