2012-08-28 10 views
11

La parte PyPy GIL dell'implementazione dell'interprete PyPy in RPython o è qualcosa che translate.py aggiunge automaticamente? Ad esempio, se dovessi scrivere il mio nuovo interprete di lingua in RPython e l'ho eseguito tramite translate.py, sarebbe soggetto al GIL a priori, o sarebbe fino al mio codice interprete?Dov'è il GIL in PyPy?

risposta

10

La gestione GIL viene inserita dal modulo/thread/gil.py nel checkout PyPy. È una funzione di traduzione opzionale e viene aggiunta solo quando il modulo thread è abilitato. Detto questo, RPython stesso non è un linguaggio thread-safe (come ad esempio C), quindi è necessario fare attenzione a se stessi per bloccare gli oggetti correttamente, in modo che non risultino inconsistenti. Il problema principale sarebbe quello di fornire un garbage collector thread-aware, perché quello che usiamo in questo momento non è thread-safe e l'aggiunta di un lock rimuoverà un sacco di benefici da un modello a thread libero.

Cheers, fijal

+0

Solo per la cronaca, sembra che clojure-py ha ottenuto circa il problema deposizione delle uova di nuovi processi e comunicare tramite messaggi Erlang stile. http://clojure-py.blogspot.com/2012/04/clojure-py-and-distributed-concurrency.html – lobsterism