[Python-3000] Kill GIL?

Nick Coghlan ncoghlan at gmail.com
Wed Sep 20 12:12:01 CEST 2006


Martin v. Löwis wrote:
> Nick Coghlan schrieb:
>> I was thinking it would be easier to split out the Global Interpreter Lock and 
>> a per-interpreter Local Interpreter Lock, rather than trying to go to a full 
>> free-threading model. Anyone sharing other objects between interpreters would 
>> still need their own synchronisation mechanism, but something like 
>> threading.Queue should suffice for that.
> 
> The challenge with that is "global" (i.e. across-interpreter) objects.
> There are several of these: the obvious singletons (None, True, False),
> the non-obvious singletons ((), -2..100 or so), and the extension module
> globals (types, and in particular exceptions).
> 
> Do you want them still to be global, or per-interpreter?

The GIL would still exist - the idea would be that most threads would be 
spending most of their time holding only their local interpreter lock.

Only when reading or writing the state shared between interpreters would a 
thread need to acquire the GIL. Alternatively, the GIL might be able to be 
turned into a read/write lock instead of a basic mutex, with threads normally 
holding a read lock which they periodically release & reacquire (in case there 
are any other threads trying to acquire).

The latter approach would probably give better performance (since you wouldn't 
need to be dropping and reacquiring the GIL in order to access the singleton 
objects).

Cheers,
Nick.

P.S. Just to be clear, I don't think doing this would be *easy*, but unlike 
full free-threading, I think it is at least potentially workable.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org


More information about the Python-3000 mailing list