Add a couple of words about the new GIL implementation

This commit is contained in:
Antoine Pitrou 2009-11-10 23:18:31 +00:00
parent aee355b7b5
commit d42bc519d2
2 changed files with 46 additions and 0 deletions

View File

@ -282,6 +282,9 @@ always available.
Return the interpreter's "check interval"; see :func:`setcheckinterval`.
.. deprecated:: 3.2
Use :func:`getswitchinterval` instead.
.. function:: getdefaultencoding()
@ -345,6 +348,12 @@ always available.
collector.
.. function:: getswitchinterval()
Return the interpreter's "thread switch interval"; see
:func:`setswitchinterval`.
.. function:: _getframe([depth])
Return a frame object from the call stack. If optional integer *depth* is
@ -626,6 +635,11 @@ always available.
performance for programs using threads. Setting it to a value ``<=`` 0 checks
every virtual instruction, maximizing responsiveness as well as overhead.
.. deprecated:: 3.2
This function doesn't have an effect anymore, as the internal logic
for thread switching and asynchronous tasks has been rewritten.
Use :func:`setswitchinterval` instead.
.. function:: setdefaultencoding(name)
@ -689,6 +703,17 @@ always available.
limit can lead to a crash.
.. function:: setswitchinterval(interval)
Set the interpreter's thread switch interval (in seconds). This floating-point
value determines the ideal duration of the "timeslices" allocated to
concurrently running Python threads. Please note that the actual value
can be higher, especially if long-running internal functions or methods
are used. Also, which thread becomes scheduled at the end of the interval
is the operating system's decision. The interpreter doesn't have its
own scheduler.
.. function:: settrace(tracefunc)
.. index::

View File

@ -85,6 +85,27 @@ New, Improved, and Deprecated Modules
(Contributed by Georg Brandl and Mattias Brändström;
`appspot issue 53094 <http://codereview.appspot.com/53094>`_.)
Multi-threading
===============
* The mechanism for serializing execution of concurrently running Python
threads (generally known as the GIL or Global Interpreter Lock) has been
rewritten. Among the objectives were more predictable switching intervals
and reduced overhead due to lock contention and the number of ensuing
system calls. The notion of a "check interval" to allow thread switches
has been abandoned and replaced by an absolute duration expressed in
seconds. This parameter is tunable through :func:`sys.setswitchinterval()`.
It currently defaults to 5 milliseconds.
Additional details about the implementation can be read from a `python-dev
mailing-list message
<http://mail.python.org/pipermail/python-dev/2009-October/093321.html>`_
(however, "priority requests" as exposed in this message have not been
kept for inclusion).
(Contributed by Antoine Pitrou)
Optimizations
=============