>> >> 2013/12/19 Pietro Battiston <m...@pietrobattiston.it> > > >> [...] >> >> Io credo che ci possa essere relazione a come e' scritto il codice. > > > OK, ragionevole dubbio. Prendi _questo_ codice: > > import redis > import random > > r = redis.Redis(db=0) > > try: > while True: > r[random.random()] = random.random() > except KeyboardInterrupt: > r.flushdb() > > > che gira su un vecchio Intel Core2 Duo CPU T7300, a 2 GHz, con 4 GB di > RAM DDR2 a 667 MHz.
Scusa ho iniziato a leggere il thread solo ora, spero di avere tutti gli elementi per risponderti: > > - Cosa mi aspetto: che almeno una delle due CPU sia fissa al 100%. improbabile, sia python che redis passano parecchio tempo in kernel space per trasferire i dati l'uno all'altro > - Cosa vedo se avvio "top": redis-server non è mai sopra al 45%, Python > non è mai sopra al 75%. direi realistico, anche se usando random() hai inficiato il test visto che su Linux random() apre /dev/urandom, quindi di nuovo un bel context switch in kernel space. > - Cosa succede se invece che TCP-IP utilizzo un socket unix: l'utilizzo > di CPU da parte di Python sale (e la performance pure, e parecchio), ma > rimanendo comunque sotto l'80%. il tempo in kernel space diminuisce, i socket unix sono piu' efficienti (anche se tecnicamente e' meglio dire che sono estremamente piu' semplici) > - Cosa posso immaginare che stia succedendo: che ci sia una latenza tra > CPU e cache, o tra una CPU e l'altra CPU, o tra le CPU e la RAM, che > "top" non sia affidabile al 100%. no no fermo, i risultati che hai sono in linea con il tuo approccio, il collo di bottiglia e' il tuo hardware nel suo insieme :) > > - Cosa me ne frega: pura curiosità, e magari pure un indizio di quanto > parallelizzare codice che utilizza in modo intensivo redis possa o meno > migliorare le prestazioni in modo lineare, o se viceversa qualunque cosa > mi stia facendo da bottleneck adesso si riproporrebbe anche > parallelizzando, magari su più di 2 CPU. > redis e' mono thread, puoi 'parallelizzare' la parte python ma visto che l'hardware ha "solo" 2 cpu e hai comunque 2 processi fissi nell'equazione (python e redis) non otterresti alcun vantaggio (anzi peggioreresti) Spero di averti tolto i dubbi :) -- Roberto De Ioris http://unbit.it _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python