[Python] threads

Enrico Franchi enrico.franchi a gmail.com
Mar 1 Dic 2009 18:47:42 CET


On Dec 1, 2009, at 6:26 PM, Pietro Battiston wrote:

> Scusami, volevo solo suggerire che il problema nelle parole "il problema
> del GIL" sembrava più una sottigliezza di italiano che di concetto... 

Il punto è che il GIL è la soluzione ad un problema, non un problema 
egli stesso. Viceversa, i threads sono una soluzione ad un problema 
che sono *anche* un problema essi stessi. Per lo meno in ambito
di programmazione con memoria condivisa, come è in ambito imperativo.
Nel mondo funzionale non sono un problema, per dire.

Al limite non è una buona soluzione. Ma io credo che il problema sia
incoraggiare la programmazione a thread in ambiente imperativo/oo.
Questo si che è un problema, per non parlare del fatto che ti lega le
zampe rispetto alla distribuzione su più macchine.

> Uhm... non riesco a seguirti. Poniamo che consideriamo "problema" il
> fatto di non poter sfruttare efficacemente due processori (senza creare
> due diversi processi). Allora se Jython, come mi sembra di capire, lo
> fa, ed esegue sempre codice Python, in cosa è poco intuitivo?

Perchè Jython ha come primitive quelle della JVM e tutto può funzionare
come in Java (ovvero ugualmente male o bene che con Java).
In particolare ti trovi pure quell'obrobrio di synchronized. Se come
van Roy e Haridi ritieni questo "funzionare male" (e mi associo) allora
funzioni male come la JVM. Se come Gosling lo consideri funzionare bene,
allora funziona bene. Suppongo che chi volesse usare il modello di 
concorrenza di Java lo considererebbe funzionare bene.

Il GIL impedisce che due thread siano vivi nell'interprete Python. In
particolare tu assumi che un sacco di cose in Python siano atomiche.
Senza GIL non lo sarebbero e di conseguenza avresti programmi *scorretti*.
Jython si appoggia ad una diversa macchina virtuale e di conseguenza
usa una differente implementazione. Idem IronPython. Idem dovrebbe
fare Unladen Swallow nel futuro.

La cosa poco intuitiva sarebbe che il codice Python *corretto* che girasse
su un cPython senza GIL diventerebbe magicamente scorretto, perchè 
ti entrerebbero dalla finestra race conditions e altre schifezze ad un
livello *sottostante* il tuo codice.



Maggiori informazioni sulla lista Python