サーバー並行性は現実,クライアント並行性は未来
Sutter's Mill - Server Concurrency != Client Concurrency
Exceptional C++ の著者として有名な Herb Sutter さん。最近はソフトウェアの並行性 (concurrency) に関する啓蒙活動を精力的に行っている。その活動の一部は Dr. Dobb's の記事や氏のブログなどで見ることができる。
ソフトウェアの並行性や,それによって得られるスケーラビリティが,どれだけ重要なことかというのは,例えば Google が提供している様々なサービスなどを見てみれば実感できることで,最近ではそれほど珍しい考えではなくなっていると思う。
でも,それはあくまでもサーバー側の世界で起こっていることの話。 Google が持っているようなサーバーには,気の遠くなるような量のデータが格納されていて,それに対してとんでもない数のリクエストが飛び込んでくる。そういった類の処理を効率よく捌いていくのに並行性が役に立つというのは,かなり前から分かっていたことで,それを実現するための知識や技術も着実に蓄積されてきていた。
それに対して,クライアント側の世界 ― つまり,みんなが個人的に使っているPCの中で,並行性を活かすということについては,意外なほどうまくいってない。クライアント側はサーバー側とは違って,いろんな人が作ったバラバラな仕組みのプログラムが雑然と動いている。それに対して,ユーザーからの複雑で細かなリクエストが,気まぐれに舞い込んでくる。そういった類の処理に対して,サーバー側と同じ理屈で並行性を活かすことは,どうやら無理と考えた方がいいようだ。
Sutter さんが頑張っているのは,この「クライアント側の世界」に並行性を持ってこようということ。それは,例えば Photoshop の動作が軽くなるとか,プログラムのコンパイルが速くなるとか,そういう狭い範囲の話じゃない。デスクトップ上で動く様々なソフトウェアが並行性によって快適に動作して,あらゆるユーザーがその恩恵を受けることができる……そんな未来を目指している。
さて,果たして,そんな未来,訪れると思う? その結末を占うことは難しいけれど,ひとつ確実なのは,もし「並行性のおかげですごく快適なデスクトップOS」が現実のものになったら,そのOSはたくさん売れるだろうということ。 Microsoft がこの分野に力を入れているのも,そういった未来を描いてのことなのだろうと思う。