@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Working with UNIX Processes を読んだ

Working With Unix Processes という本を読んだ。 Thin の作者からの「時期バージョンを作るとき参考にする」というメッセージ*1が添えられていたのに惹かれて買った。著者のサイトで直販しているが、 Kindle Store からも購入できる

この本は一言でいうと、 UNIX 系 OS のプロセスについての本だ。プロセスとは何か、という導入部から始まって、プロセス ID やプロセス名、終了コードへと言及し、 fork(2) やソンビプロセス、シグナル、そしてデーモンプロセスの説明あたりまで本編中で説明している。 UNIX プログラミングに関する類書は 1000 ページを超えるものが多いなかで、この本はわずか 100 ページほどしかなく容易く読める*2。しかしページ数が少ないぶん、あまり踏み込んだ内容とは言えず、全体的にやや浅い印象を受けた。すでに UNIX, Linux ないし *BSD 環境でのプログラミング経験がある人にとっては既知の内容が多く、本編の内容は良い復習にはなってもそこから多くを得ることはできないかもしれない。電子書籍に対してページ数単価がどうとか言うのもナンセンスだが、これだけの内容で $27 という値段は高いな、というのが正直な感想だった。

だが、この本の真価は付録にある。 Resque と Unicorn という、 Ruby で書かれた非常に人気のあるジョブキューシステムとウェブアプリケーションサーバに関する話題も興味深いが、最も注目に値すべきなのは Prefork サーバの仕組みを解説しているところだ。 copy-on-write の恩恵を受けられるのでメモリ効率が良い、というのはもともと理解していたが、ワーカープロセスがすべて同じソケットを共有することでロードバランシングの仕組みを OS 任せにできる、という利点は全く思い当たらなかった。シンプルで美しく、一度気づけばすぐ理解できる。何より「UNIX プログラミングとはこうやるんだ」という美意識を感じた。知っている人にはどうってことない内容だろうが、僕にとってはここだけで $27 の元がとれた。

すべてのサンプルコードが Ruby で書かれていて、 #include という文字列をみると発作が起きてしまうウェブ系プログラマにも安心だ。 Spyglass というウェブサーバのソースコードもついてくる*3。あくまで学習用ということだが、ざっと眺めてみたところとても読みやすいコードで、コメントも多く添えられていた。学習補助のための短く実用的とは言えないサンプルコードと、現実の環境化で厳しく育てられたアプリケーションのコードの間を埋めることができる、非常に使えるコードだと感じた。

以下の段落取り消します。すいません。コピーさせて欲しいとか何アホなこと言ってたんだろう。

一つ難点を挙げるとすれば、ライセンスだろうか。学習用の教材に使われることを期待してか、 $99 で 20 人まで利用できるチームライセンスが用意されている。大きな組織ではそういうものが整備されていたほうが便利がいいのかもしれないが、小中規模な組織ではもう少し気軽にシェアさせて欲しい。 DRM がかかっているわけではなさそうなので同僚にコピーをあげても著者にわかりはしないだろうが、複数人で使うなら人数分買えよとあまり強気で言われると心理的にはやりづらい。せっかくある程度経験を積んだ人にも薦めたい本なのに、ここが気になってあまり積極的に読みなよといえないのはもったいないなと思った*4

Prefork について理解できたこの感動をぜひとも他人に伝えたいので、いずれ社内勉強会でこの本の内容を踏まえて Prefork サーバの仕組みについて発表したいと思う。機会があれば社外でも発表してみたいが、特定の言語とも特定のサービスとも無関係の話題なので発表できる場があるかどうか。もしどうしても聞きたいという奇特な人がいたらこちらからお申し込みください

最後に、この本の存在は @mori_dev さんが Twitter で触れていて知った。面白い本の話題を教えてくれてありがとうございました。

後日談

ブログに書評を書く前に同僚に感想を話したりして地道に宣伝していたが、社内 SNSmizzy さんの「UNIX 技術者は全員読むべき。欲しい人いたらチームライセンス買って折半しましょう(あえて経費ではなく)」という呼び掛けがあり、半日で 20 人が名乗りを挙げた。意外に盛り上がって嬉しくなったので、感想も兼ねて著者にメールしたところ二時間で返事が来た。この書評を英訳する時間と気力がなくて Bing の機械翻訳を送りつけたので(手抜き)細かいところは伝わってなさそうだけど、コミュニケーションとれてよかった。

Hello, my name is Kensuke Nagae. I'm a programmer live in Japan.

Last month I bought Working With Unix Processes and read it.
It's very useful for me, especially about prefork server architecture
explanation.

I talked to my colleagues and blogged about this book.
Here is my article. http://bit.ly/HepujO
Several persons are interested in this book, and my boss decided to
buy team license for his men.

Thank you for writing this good book.

Thanks Kensuke! I'm thrilled to hear that the book was useful to you.

I read the translated version of your article and there's certainly some meaning lost in the translation :P Overall I understand what you were trying to say though. Thanks again.

*1:It will definitely help me design the next version of Thin.

*2:Hate long boring books? Where other books can be 1000+ pages covering every aspect of your system I’ve boiled it down to just what you really need to know. At just over 100 pages this book is quick and to the point.

*3:当然これも Ruby で書いてあるが、 HTTP パーサーは C 実装つきという気合の入れようだ

*4:まぁこの本の話をして興味を持つような人は自腹で買っちゃうけど