[pypy-commit] pypy default: update the faq about the gil

arigo pypy.commits at gmail.com
Sun Feb 26 06:44:26 EST 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r90360:75edc48a7774
Date: 2017-02-26 12:43 +0100
http://bitbucket.org/pypy/pypy/changeset/75edc48a7774/

Log:	update the faq about the gil

diff --git a/pypy/doc/faq.rst b/pypy/doc/faq.rst
--- a/pypy/doc/faq.rst
+++ b/pypy/doc/faq.rst
@@ -156,19 +156,30 @@
 Does PyPy have a GIL?  Why?
 -------------------------------------------------
 
-Yes, PyPy has a GIL.  Removing the GIL is very hard.  The problems are
-essentially the same as with CPython (including the fact that our
-garbage collectors are not thread-safe so far).  Fixing it is possible,
-as shown by Jython and IronPython, but difficult.  It would require
-adapting the whole source code of PyPy, including subtle decisions about
-whether some effects are ok or not for the user (i.e. the Python
-programmer).
+Yes, PyPy has a GIL.  Removing the GIL is very hard.  On top of CPython,
+you have two problems:  (1) GC, in this case reference counting; (2) the
+whole Python language.
 
-Instead, since 2012, there is work going on on a still very experimental
-:doc:`Software Transactional Memory <stm>` (STM) version of PyPy.  This should give
-an alternative PyPy which works without a GIL, while at the same time
-continuing to give the Python programmer the complete illusion of having
-one.
+For PyPy, the hard issue is (2): by that I mean issues like what occurs
+if a mutable object is changed from one thread and read from another
+concurrently.  This is a problem for *any* mutable type: it needs
+careful review and fixes (fine-grained locks, mostly) through the
+*whole* Python interpreter.  It is a major effort, although not
+completely impossible, as Jython/IronPython showed.  This includes
+subtle decisions about whether some effects are ok or not for the user
+(i.e. the Python programmer).
+
+CPython has additionally the problem (1) of reference counting.  With
+PyPy, the problem is simpler: we need to make our GC multithread-aware.
+This is easier to do efficiently in PyPy than in CPython.  It doesn't
+solve the issue (2), though.
+
+Note that since 2012 there is work going on on a still very experimental
+:doc:`Software Transactional Memory <stm>` version of PyPy.  This should
+give an alternative PyPy which works without a GIL, while at the same
+time continuing to give the Python programmer the complete illusion of
+having one.  This work is currently a bit stalled because of its own
+technical difficulties.
 
 
 Is PyPy more clever than CPython about Tail Calls?


More information about the pypy-commit mailing list