なるほどUnixプロセス ― Rubyで学ぶUnixの基礎 / Jesse Storimer

#naruhounix を読んだ。

正直「プロセス?あれでしょ、なんか動くやつ。」というレベルだったので非常に勉強になった。

Rubyで書かれているのも、余計なこと(Cの文法とか例外処理とか)がついてこなくて理解しやすい。

書き方はいいからイメージが知りたいんや!というタイプの方におすすめ。

逆にRubyの余計なこと(このバージョンでは修正済みとか)がついてくるのでRubyist寄りであることはいなめない。

プロセスをforkしてもリソースは同じみたいなところはポインタ的な解釈。

あとfork後ちょっとでもメモリの内容が変わったら全コピーだと思ってたけど全然違ってオブジェクト単位?(このへんあやふや)というか本当に変わった部分だけコピーされるみたいだ。

例えばRailsアプリとかは立ち上がる際に大量のフレームワークのコードとアプリケーションのコードを読み込んでいるので数秒とかかかる。

しかしコードとか設定ファイルはアプリケーションとしてはほとんど変わることがない部分なので次から再利用することができれば超早いよねというのがSpringやUnicornのやりたいことなんだろうなあと思う。

並列処理というもう一つの側面もあって、これまで並列処理よくわからんというイメージだったけどとりあえずforkしておけばプロセスが複数立ち上がってあとはOSがよしなに並列化してくれるということがわかった。OSすごい。

実際に作ってみた習作

M個のタスクを最大同時Nプロセスで処理する、forkしてwaitするだけの簡単なもの。 forkとwaitの前後で任意のcallbackを呼べるオプション付き。

ここではフィボナッチを計算しているけど、とりあえず試してみると同時起動できるプロセス数は1プロセスより2プロセスの方が結構早くなる。どんどんプロセス数を上げるとCPUのコア数ぐらいでどんなにプロセスを作ってもあんまり早くならないことがわかった。

コードや扱うオブジェクトは小さいのでメモリ共有の実感はあんまりなかったけど自分でも並列処理できるんじゃんという小さい自信になった。

兄弟本もあるようなので読んでみようかなあ。