2009-12-16 5 views
11

Ho appena visto this section of Unladen Swallow's documentation venire su Hacker News. Fondamentalmente, sono gli ingegneri di Google a dire che non sono ottimisti sulla rimozione di GIL. Tuttavia, sembra che ci sia una discussione sul garbage collector intervallato da questo discorso sul GIL. Qualcuno potrebbe spiegare la relazione con me?Che cosa ha a che fare GIL Python con il garbage collector?

+2

Bene, leggi informazioni su GIL. http://wiki.python.org/moin/GlobalInterpreterLock Come puoi vedere, è tutto basato sulla gestione della memoria. –

risposta

17

La versione molto breve è che attualmente Python gestisce la memoria con un conteggio dei riferimenti + un contrassegno & schema di raccolta del ciclo di sweep, ottimizzato per la latenza (invece del throughput).

Questo va bene quando c'è un solo thread mutante, ma in un sistema multi-thread, è necessario sincronizzare tutte le volte che si modificano i conti, oppure si può avere valori "cadere attraverso le crepe", e i primitivi di sincronizzazione sono piuttosto costosi sull'hardware contemporaneo.

Se refcounts non sono state modificate così spesso, questo non sarebbe un problema, ma praticamente ogni singola operazione si fa in CPython può causare un refcount a cambiare qualche parte, quindi le opzioni sono o GIL, facendo refcounts con alcuni tipo di sincronizzazione (e letteralmente trascorri quasi tutto il tuo tempo alla sincronizzazione), o abbandonare il sistema di conteggio per una sorta di vero e proprio garbage collector.

1

La risposta del tonno-pesce fondamentalmente la copre. Se volete maggiori dettagli, c'è stata una discussione su come il GIL potrebbe essere rimosso senza dover troppo molto di un effetto sul riferimento contando qui: http://mail.python.org/pipermail/python-ideas/2009-October/006264.html

+0

Il suggerimento in quel collegamento era ingenuo. L'utilizzo del confronto e scambio per il conteggio dei riferimenti è troppo lento. –