Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Python: Checkins

r76110 - sandbox/trunk/newgil/Python/ceval_gil.h

 

 

Python checkins RSS feed   Index | Next | Previous | View Threaded


python-checkins at python

Nov 4, 2009, 2:21 PM

Post #1 of 1 (47 views)
Permalink
r76110 - sandbox/trunk/newgil/Python/ceval_gil.h

Author: antoine.pitrou
Date: Wed Nov 4 22:04:05 2009
New Revision: 76110

Log:
Document the implementation



Modified:
sandbox/trunk/newgil/Python/ceval_gil.h

Modified: sandbox/trunk/newgil/Python/ceval_gil.h
==============================================================================
--- sandbox/trunk/newgil/Python/ceval_gil.h (original)
+++ sandbox/trunk/newgil/Python/ceval_gil.h Wed Nov 4 22:04:05 2009
@@ -25,6 +25,40 @@
/* #define TRACE_PRIO */


+/*
+ Notes about the implementation:
+
+ - The GIL is just a boolean variable (gil_locked) whose access is protected
+ by a mutex, and whose changes are signalled by a condition variable. The
+ mutex itself is rarely taken and, therefore, mostly uncontended.
+
+ - In the GIL-holding thread, the main loop (PyEval_EvalFrameEx) must be
+ able to release the GIL on demand by another thread. A volatile boolean
+ variable (gil_drop_request) is used for that purpose, which is checked
+ at every turn of the eval loop.
+
+ [.Actually, another volatile boolean variable (eval_breaker) is used
+ which aggregates several conditions into one. Volatile booleans are
+ ok as signalling means since Python is run on cache-coherent
+ architectures only.]
+
+ - A thread wanting to take the GIL will first wait for a given amount of
+ time before setting gil_drop_request. This amount of time defines the
+ ideal thread switching period. It is available for the user to read
+ and modify using `sys.{get,set}switchinterval()`.
+
+ - Forced thread switching when releasing the GIL is implemented. When
+ a thread releases the GIL and gil_drop_request is set, that thread
+ ensures that another GIL-awaiting thread gets scheduled. It does so
+ by waiting on a variable (gil_last_holder) controlled through another
+ {mutex, condition} pair.
+
+ - An optional policy mechanism, priority requests, is currently disabled.
+ The intent was to further improve the latency of some types of GIL-taking
+ activities, such as being woken up on a socket. If it is confirmed that
+ this feature is unnecessary, support code should be removed.
+*/
+
#ifndef _POSIX_THREADS
/* This means pthreads are not implemented in libc headers, hence the macro
not present in unistd.h. But they still can be implemented as an external
_______________________________________________
Python-checkins mailing list
Python-checkins[at]python.org
http://mail.python.org/mailman/listinfo/python-checkins

Python checkins RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact lists@gossamer-threads.com
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.