[Python-ideas] solving multi-core Python

Sturla Molden sturla.molden at gmail.com
Mon Jun 22 02:41:49 CEST 2015


On 22/06/15 01:39, Antoine Pitrou wrote:

> Or perhaps the fact that those superiors APIs are a PITA.

Not all of them, no.

HeapAlloc is a good example. Very easy to use, and the "one heap per 
thread" design often gives excellent performance compared to a single 
global heap. But on Linux we only have malloc et al., allocating from 
the global heap. How many Linux programmers have even considered using 
multiple heaps in combination with multi-threading? I can assure you it 
is not common.

A good idea is to look at the Python C API. We have PyMem_Malloc, but 
nothing that compares to Windows' HeapAlloc.

Not only does HeapAlloc remove the contention for the global heap, it 
can also serialize. Instead of serializing an object by traversing all 
references in the object tree, we just serialize the heap from which it 
was allocated.

And as for garbage collection, why not deallocate the whole heap in one 
blow? Is the any reason to pair each malloc with free if one could just 
zap the whole heap? That is what HeapDestroy does. On Linux we would 
typically homebrew a memory pool to achieve the same thing. But a memory 
pool needs to traverse a chain of pointers and call free() multiple 
times, each time with contention for the spinlock protecting the global 
heap. And when allocating from a memory pool we also have contention for 
the global heap. It cannot in any way compare to the performance of the 
Win API HeapCreate/HeapDestroy and HeapAlloc/HeapFree.


Sturla



More information about the Python-ideas mailing list