インスタンス変数ににアクセスする時は必ずlockをかける
と言う感じの実装になっているらしい。
def run(self) :
global result
total = 0
while self.i < self.last :
self.i=self.i+1
total += self.i
result[self.id] = total
return
と、
def run(self) :
global result
total = 0
i = self.i
last = self.last
while i < last :
i=i+1
total += i
result[self.id] = total
return
だと、Core2Duo で 2 thread で動かす方が遅くなるのね。
% time python thread1.py 1000001
parallel
sum 500001500001
python thread1.py 1000001 0.52s user 0.21s system 130% cpu 0.562 total
% time python thread1.py 1000000
sequential
sum 500000500000
python thread1.py 1000000 0.43s user 0.02s system 100% cpu 0.447 total
% time python thread2.py 1000001
parallel
sum 500001500001
python thread2.py 1000001 0.20s user 0.09s system 128% cpu 0.227 total
% time python thread2.py 1000000
sequential
sum 500000500000
python thread2.py 1000000 0.16s user 0.02s system 101% cpu 0.180 total
thread.local() でも良いのかも知れないけど、使い方が良くわからないな。
No comments:
Post a Comment