STINNER Victor <vstin...@python.org> added the comment:

Mark:
> The problem with having a single immortal `None`, is that it will cause data 
> cache thrashing as two different CPUs modify the refcount on the shared 
> `None` object.

Yeah, I concur with Mark: having one singleton per interpreter should provide 
better usage of the CPU caches, especially CPU data cache level 1.


Mark:
> Consider the case where a thread that doesn't hold the GIL attempts to get a 
> reference on `None`.

The main drawback of PR 18301 is that accessing "Py_None" means accessing 
tstate->interp->none. Except that the commonly used _PyThreadState_GET() 
returns NULL if the thread doesn't hold the GIL.

One alternative would be to use PyGILState_GetThisThreadState() but this API 
doesn't support subinterpreters.

Maybe we are moving towards a major backward incompatible changes required to 
make the subinterpreters implementation more efficient.

Maybe CPython should have a backward compatible behavior by default (Py_None 
can be read without holding the GIL), but running subinterpreters in parallel 
would change Py_None behavior (cannot be read without holding the GIL).

I don't know.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39511>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to