
On Tue, Oct 20, 2009 at 15:24, Sturla Molden <sturla@molden.no> wrote:
There are lock-free data structures of any conceivable sort. There are multithreaded garbage collectors in Java and .NET, that don't need a global lock. I've heard claims that removal of the GIL would require Python to use a garbage collector instead of reference counts. That is not true. Lock-free data structures and garbage collectors have all one thing in common: they use a compare-and-exchange (CAS) instruction present in most modern processors, e.g. CMPXCHG on x86. In fact, CAS is used to implement OS mutexes (sleeplocks) and the less expensive spinlocks. Without a CAS instruction for the platform, there would be no GIL. All platforms that has a working GIL has a working CAS.
CPython uses *extensive* refcounting operations on objects shared between threads (builtins, globals, literals, etc). The cache contention over those refcounts means even 2 threads are significantly slower than 1 thread, nevermind the increased contention of 3+ threads. That is why it is said a true tracing GC is needed to replace the refcounting GC. -- Adam Olsen, aka Rhamphoryncus