Ciao a tutti,<br>mi stò studiando un po' l'architettura di python e sono dunque al GIL. <br>Premetto che il mio scopo è puramente a scopo didattico, non sono qui a parlare di quanto sia bello o brutto il GIL, ma<br>
sentitevi liberi di esprimere qualsiasi parere anche personale ;-)<br>Guardando indietro nei messaggi di questa ML ho trovato altro e mi sono scaricato "Inside the Python GIL" di David Beazley.<br>L'ho quasi letto tutto (mi mancano proprio le ultime tre-quattro pagine) e ho voluto ripetere i test.<br>
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:<br>1) non posto il sorgente in quanto è un semplice test sequenziale "count(100000000); count(100000000)"<br>
2) usando il multithreading ed effettivamente si nota la differenza (anche a me 2x più lento o peggio) [2]<br clear="all">3) usando la fork [3]<br><br>Ho aggiunto il test per la fork in quanto creando un nuovo processo il GIL non dovrebbe dare problemi, giusto?<br>
Beh ecco i risultati sul mio P4 3,00GHz:<br>1) sequenziale<br>----------------------<br>real 0m35.363s<br>user 0m34.831s<br>sys 0m0.087s<br>----------------------<br>2) threaded<br>----------------------<br>real 1m30.482s<br>
user 1m25.342s<br>sys 0m28.125s<br>----------------------<br>3) forked<br>----------------------<br>real 0m52.938s<br>user 1m30.927s<br>sys 0m0.395s<br>----------------------<br><br>Come mai con il fork c'è comunque un rallentamento?<br>
Dipende solamente dal tempo richiesto per creare un nuovo processo (e comunque 19 secondi mi sembrano troppi) o c'è qualcos'altro?<br><br>[1] <a href="http://paste.pocoo.org/show/kjq0U2opWJIAxm3bqYHK/">http://paste.pocoo.org/show/kjq0U2opWJIAxm3bqYHK/</a><br>
[2] <a href="http://paste.pocoo.org/show/7LAdKtPHLtAjiGltOzkf/">http://paste.pocoo.org/show/7LAdKtPHLtAjiGltOzkf/</a><br>[3] <a href="http://paste.pocoo.org/show/QCdRBl0ODL3M2QsZIH73/">http://paste.pocoo.org/show/QCdRBl0ODL3M2QsZIH73/</a><br>
<br>A presto,<br>ciao!<br><br>-- <br>Alessandro A.<br>