[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