Message361161
> The problem is to make Py_INCREF/Py_DECREF efficient.
That is exactly why I didn't propose a change to them. The singletons
still are refcounted as usual, just that their ob_refcnt is ignored.
If they somehow reach 0, they just "resurrect" themselves and ignore
the regular collection behavior. In the presence of multiple
DECREF'ers, the ob_refcnt field is garbage, but that is OK as it is
effectively ignored. Practicality vs Purity and all that.
> Last time someone tried to use an atomic variable for ob_refcnt, it was 20% slower if I recall correctly. If many threads start to update such atomic variable, the CPU cacheline of common singletons like None, True and False can quickly become a performance bottleneck.
Exactly so, hence why I chose the simple solution of effectively
ignoring ob_refcnt.
> On the other side, if each interpreter has its own objects, there is no need to protect ob_refcnt, the interpreter lock protects it.
My solution also does not need any protection around ob_refcnt. |
|
Date |
User |
Action |
Args |
2020-02-01 11:23:50 | jeremy.kloth | set | recipients:
+ jeremy.kloth, ncoghlan, vstinner, eric.snow, nanjekyejoannah |
2020-02-01 11:23:50 | jeremy.kloth | link | issue39511 messages |
2020-02-01 11:23:49 | jeremy.kloth | create | |
|