Pythonのthreadとprocessを試してみた
実験結果
- x軸は,threadの数,processの数
- y軸は,並列処理でかかった計算時間 / 逐次実行でかかった計算時間
- threadが遅い.threadを作るオーバーヘッドのために,どんどん遅くなっていっていると考えられる.
- processはそこそこ.process sizeに比例とまではいかないものの,8 processまでならなかなかの高速化.
結論
- Pythonさんのthreading.Threadは,GILだかなんだかのせいで,少なくとも普通にやったのでは並列処理にならないらしい.
- multiprocessing.Processなら,コア数分くらいまでなら並列化をちゃんとやってくれるみたい.
実装
単純にn回分数えるだけの関数を分割して実行しただけです.
ソースは,こちら.Bitbucketで公開してみました.ちゃんとできてるかな…?
# よく見ると,数の分割がちょっと効率悪いけど,結果には影響しなさそうだから放置しとこう.
こちらのサイトを参考にしました.というよりモロパクリしました.
http://www.quark.kj.yamagata-u.ac.jp/~hiroki/python/?id=15