[Python-ideas] Ideas towards GIL removal

Greg Ewing greg.ewing at canterbury.ac.nz
Sat Apr 14 02:51:04 CEST 2007


Brett Cannon wrote:

> In reality this is true, but obviously not technically true.  You could 
> delete a class if you really wanted to.  But obviously it rarely happens.

And if it does, the worst that will happen is that
the original version will hang around, tying up a
small amount of memory.

> I wonder what the overhead is going to be.  If for every INCREF or 
> DECREF you have to check that an object is immortal or whether it is a 
> thread-owned object is going to incur at least an 'if' check, if not 
> more.

Clearly, there will be a small increase in overhead.
But it may be worth it if it avoids the need for
a rather expensive lock/unlock. It was pointed out
earlier that, even using the special instructions
provided by some processors, this can take a great
many times longer than a normal memory access or
two.

> And for the second idea, adding two more fields to every object might be 
> considered expensive by some in terms of memory.

Again, it's a tradeoff. If it enables removal of
the GIL and massive threading on upcoming multi-
core CPUs, it might be considered worth the cost.
> 
> Also, how would this scenario be handled: object foo is created in 
> thread A ...  is passed to thread B, and then DECREF'ed in thread B as
> the object is no longer needed by anyone.

I'll have to think about that. If a thread gives
away a reference to another thread, it really
needs to be a global reference rather than a
local one. The tricky part is telling when this
happens.

> But if objects start with a global refcount of 1 but a 
> local refcount of 0 and it is DECREF'ed locally then wouldn't that fail 
> for the same reason?

That one's easier -- if the local refcount is 0
on a decref, you need to lock the object and
decrement the global refcount.

--
Greg



More information about the Python-ideas mailing list