ページ

2008年9月2日

スレッドとプロセスと

大昔のLinuxはスレッドはプロセスでした。プロセスの生成コストなどの問題があって本物のスレッドになりました。さて,Pythonのスレッドは,ジャイアントロックで,インタープリタ一つに対して本当に同時に実行されるスレッドは一つだけです。yieldを使って擬似的によりマルチスレッドにすることはできましたが,そんな酔狂なことを好んでやるのはTwisted関係者ぐらいでしょう。

Python2.6でmultiprocessingという機能が入ります。これ,面白そうだと書いたのは昨日です。で,本当に面白そうなんです。まあ,カーネルのスケジューラとか好きだったので・・・。で,Pythonとスレッドに関しては,もっとpreemptiveな実装にしようと言う動きがありますが,こちらは,標準ライブラリだけじゃなくって,膨大ないろんなライブラリを書き換えないといけないので,現実的じゃありません。まあ,ほとんどのライブラリがマルチスレッドで動きが怪しかったり,import自体大丈夫なのかとか・・・。
で,2.6のmultiprocessingです。これって,結局,threadでやるとメモリを共有しちゃうから問題だよね,それじゃ,プロセスでやれば?と言うことです。と言うことで,この点だけ見れば,スレッドからプロセスへと,Linuxなどの流れに逆行しちゃっています。
今までのグローバルなロックがいけなかったかと言うと,よほど特殊なCPUじゃない限り問題なかったのです。以前は,なんだかんだ言って,同時に走るスレッドはシステム全体で一個でした。でも,マルチコアになっちゃって,複数のスレッドが本当に同時に走るので,ちゃんとスレッド対応すれば性能が2倍とか数倍になります。で,これをもっとも低コストでやるのが,子プロセスでやることだったのでしょう。

でも,これだけだとそんなに面白くも何ともないです。これがそのうち,一つのPC内じゃなくってネットワーク経由で別のPCのプロセスとイチャイチャすれば,そのうちMapReduceになる?という妄想がわいてくるのです。


0 件のコメント: