import time, sys
import thread
from multiprocessing import Process
def doIt(start):
end = time.time()
print end - start
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "thread":
thread.start_new_thread(doIt, (time.time(),))
time.sleep(1)
else:
Process(target=doIt, args=(time.time(),)).start()
doIt関数が実行され始めるまでの時間です。これは実際にはプロセスやスレッドの作成のための正確な時間がでるわけではないですが,大体の目安にはなります。次のテーブルはスレッドによるものとmultiprocessingのものの時間(秒)です。
スレッド | multiprocessing |
0.0001969337463 | 0.0215649604797 |
0.0002009868621 | 0.0210480690002 |
0.0006930828094 | 0.0213701725006 |
0.0000710487365 | 0.0214710235596 |
0.0003149509429 | 0.0205829143524 |
で,プロセスの生成はスレッドの生成に比べて100倍近く遅いです。昨日の計測では,重い処理をやっていたのでプロセスやスレッドの生成は誤差の範囲内ですが,処理自体が0.02秒以内でおわるようなものだと,いろいろとトレードオフが発生しそうです。もっともプロセスプーリングすればその辺は解消されるので,一概にだめとは言い切れませんが。
2 件のコメント:
OSXのプロセス生成のオーバーヘッドが大きい為ですね。
手持ちのLinux(Ubuntu 8.04)では12倍程度の差です。
プロセス生成のオーバーヘッドが,OS Xが有意に大きいだけなのか・・・。
Linuxでも約一桁違うのは,それはそれで大きいですね。。
コメントを投稿