Miksi oheinen koodi kuormittaa prosessoria vain 35% tasolla? Mielestäni siinä on neljä erillistä threadia jotka voivat toimia vapaasti toisistaan välittämättä. Prosessorina on Q6600. Jos sitten ajankin vain yhtä threadia niin se kyllä kuormittaa yksittäisen coren tappiin. Missä tuossa koodissa on se osuus joka vaatii syknronointia? Minä en sitä siitä löytänyt ainakaan nopeasti sen tarkemmin pythonin sielunelämää tuntematta.
Ainoa juttu mikä tulee nopeasti mieleen on se että cntr olisi synkronoitu. Mutta käsittääkseni sen pitäisi olla privaatti ja funktion / blokin sisäinen muuttuja.
import threading
from time import sleep, time
def loop(i, event):
while not event.isSet():
cntr = 0
while cntr < 1000000:
cntr += 1
store='handle some data etc.'
event = threading.Event()
print 'starting'
th1 = threading.Thread(target=loop, args=(1, event))
th1.start()
th2 = threading.Thread(target=loop, args=(2, event))
th2.start()
th3 = threading.Thread(target=loop, args=(3, event))
th3.start()
th4 = threading.Thread(target=loop, args=(4, event))
th4.start()
#Lisä testi threadit kun testasin 8 threadilla, ei vaikutusta.
#th11 = threading.Thread(target=loop, args=(1, event))
#th11.start()
#th12 = threading.Thread(target=loop, args=(2, event))
#th12.start()
#th13 = threading.Thread(target=loop, args=(3, event))
#th13.start()
#th14 = threading.Thread(target=loop, args=(4, event))
#th14.start()
print 'running...'
sleep(10)
print 'stop...'
event.set()
th1.join()
th2.join()
th3.join()
th4.join()
print 'end'