[Python] GIL e fork - multiprocesso -
Alessandro Agosto
the.6one6 a gmail.com
Mar 11 Maggio 2010 16:49:45 CEST
Ciao a tutti,
mi stò studiando un po' l'architettura di python e sono dunque al GIL.
Premetto che il mio scopo è puramente a scopo didattico, non sono qui a
parlare di quanto sia bello o brutto il GIL, ma
sentitevi liberi di esprimere qualsiasi parere anche personale ;-)
Guardando indietro nei messaggi di questa ML ho trovato altro e mi sono
scaricato "Inside the Python GIL" di David Beazley.
L'ho quasi letto tutto (mi mancano proprio le ultime tre-quattro pagine) e
ho voluto ripetere i test.
Ho riscritto la medesima funzione CPU-bound (non mi viene un equivalente
italiano, forse "che sfrutta la sola CPU"?) [1] e l'ho adattata a tre test:
1) non posto il sorgente in quanto è un semplice test sequenziale
"count(100000000); count(100000000)"
2) usando il multithreading ed effettivamente si nota la differenza (anche a
me 2x più lento o peggio) [2]
3) usando la fork [3]
Ho aggiunto il test per la fork in quanto creando un nuovo processo il GIL
non dovrebbe dare problemi, giusto?
Beh ecco i risultati sul mio P4 3,00GHz:
1) sequenziale
----------------------
real 0m35.363s
user 0m34.831s
sys 0m0.087s
----------------------
2) threaded
----------------------
real 1m30.482s
user 1m25.342s
sys 0m28.125s
----------------------
3) forked
----------------------
real 0m52.938s
user 1m30.927s
sys 0m0.395s
----------------------
Come mai con il fork c'è comunque un rallentamento?
Dipende solamente dal tempo richiesto per creare un nuovo processo (e
comunque 19 secondi mi sembrano troppi) o c'è qualcos'altro?
[1] http://paste.pocoo.org/show/kjq0U2opWJIAxm3bqYHK/
[2] http://paste.pocoo.org/show/7LAdKtPHLtAjiGltOzkf/
[3] http://paste.pocoo.org/show/QCdRBl0ODL3M2QsZIH73/
A presto,
ciao!
--
Alessandro A.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20100511/e6715e9d/attachment.htm
Maggiori informazioni sulla lista
Python