[Python-Dev] "Global freepool"
Serhiy Storchaka
storchaka at gmail.com
Thu Jun 1 06:09:23 EDT 2017
More information about the Python-Dev mailing list
Thu Jun 1 06:09:23 EDT 2017
- Previous message (by thread): [Python-Dev] "Global freepool"
- Next message (by thread): [Python-Dev] "Global freepool"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
01.06.17 12:20, Victor Stinner пише: > 2017-06-01 10:40 GMT+02:00 Antoine Pitrou <solipsis at pitrou.net>: >> This is already exactly how PyObject_Malloc() works. (...) > > Oh ok, good to know... > >> IMHO the main thing the >> private freelists have is that they're *private* precisely, so they can >> avoid a couple of conditional branches. > > I would like to understand how private free lists are "so much" > faster. In fact, I don't recall if someone *measured* the performance > speedup of these free lists :-) I measured the performance boost of adding the free list for dict keys structures. [1] This proposition was withdraw in the favor of using PyObject_Malloc(). The latter solution is slightly slower, but simpler. But even private free lists are not fast enough. That is why some functions (zip, dict.items iterator, property getter, etc) have private caches for tuples and the FASTCALL protocol added so much speedup. At end we have multiple levels of free lists and caches, and every level adds good speedup (otherwise it wouldn't used). I also have found many times is spent in dealloc functions for tuples called before placing an object back in a free list or memory pool. They use the trashcan mechanism for guarding from stack overflow, and it is costly in comparison with clearing 1-element tuple. [1] https://bugs.python.org/issue16465
- Previous message (by thread): [Python-Dev] "Global freepool"
- Next message (by thread): [Python-Dev] "Global freepool"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list