mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Elaborate about the GIL.
This commit is contained in:
		
							parent
							
								
									f8dc9ca84e
								
							
						
					
					
						commit
						003428158b
					
				
					 2 changed files with 35 additions and 13 deletions
				
			
		|  | @ -102,9 +102,10 @@ Glossary | |||
|       See :pep:`343`. | ||||
| 
 | ||||
|    CPython | ||||
|       The canonical implementation of the Python programming language.  The | ||||
|       term "CPython" is used in contexts when necessary to distinguish this | ||||
|       implementation from others such as Jython or IronPython. | ||||
|       The canonical implementation of the Python programming language, as | ||||
|       distributed on `python.org <http://python.org>`_.  The term "CPython" | ||||
|       is used when necessary to distinguish this implementation from others | ||||
|       such as Jython or IronPython. | ||||
| 
 | ||||
|    decorator | ||||
|       A function returning another function, usually applied as a function | ||||
|  | @ -263,16 +264,25 @@ Glossary | |||
|       See :term:`global interpreter lock`. | ||||
| 
 | ||||
|    global interpreter lock | ||||
|       The lock used by Python threads to assure that only one thread | ||||
|       executes in the :term:`CPython` :term:`virtual machine` at a time. | ||||
|       This simplifies the CPython implementation by assuring that no two | ||||
|       processes can access the same memory at the same time.  Locking the | ||||
|       entire interpreter makes it easier for the interpreter to be | ||||
|       multi-threaded, at the expense of much of the parallelism afforded by | ||||
|       multi-processor machines.  Efforts have been made in the past to | ||||
|       create a "free-threaded" interpreter (one which locks shared data at a | ||||
|       much finer granularity), but so far none have been successful because | ||||
|       performance suffered in the common single-processor case. | ||||
|       The mechanism used by the :term:`CPython` interpreter to assure that | ||||
|       only one thread executes Python :term:`bytecode` at a time. | ||||
|       This simplifies the CPython implementation by making the object model | ||||
|       (including critical built-in types such as :class:`dict`) implicitly | ||||
|       safe against concurrent access.  Locking the entire interpreter | ||||
|       makes it easier for the interpreter to be multi-threaded, at the | ||||
|       expense of much of the parallelism afforded by multi-processor | ||||
|       machines. | ||||
| 
 | ||||
|       However, some extension modules, either standard or third-party, | ||||
|       are designed so as to release the GIL when doing computationally-intensive | ||||
|       tasks such as compression or hashing.  Also, the GIL is always released | ||||
|       when doing I/O. | ||||
| 
 | ||||
|       Past efforts to create a "free-threaded" interpreter (one which locks | ||||
|       shared data at a much finer granularity) have not been successful | ||||
|       because performance suffered in the common single-processor case. It | ||||
|       is believed that overcoming this performance issue would make the | ||||
|       implementation much more complicated and therefore costlier to maintain. | ||||
| 
 | ||||
|    hashable | ||||
|       An object is *hashable* if it has a hash value which never changes during | ||||
|  |  | |||
|  | @ -17,11 +17,23 @@ The :mod:`dummy_threading` module is provided for situations where | |||
|    methods and functions in this module in the Python 2.x series are still | ||||
|    supported by this module. | ||||
| 
 | ||||
| .. impl-detail:: | ||||
| 
 | ||||
|    Due to the :term:`Global Interpreter Lock`, in CPython only one thread | ||||
|    can execute Python code at once (even though certain performance-oriented | ||||
|    libraries might overcome this limitation). | ||||
|    If you want your application to make better of use of the computational | ||||
|    resources of multi-core machines, you are advised to use | ||||
|    :mod:`multiprocessing` or :class:`concurrent.futures.ProcessPoolExecutor`. | ||||
|    However, threading is still an appropriate model if you want to run | ||||
|    multiple I/O-bound tasks simultaneously. | ||||
| 
 | ||||
| .. seealso:: | ||||
| 
 | ||||
|    Latest version of the :source:`threading module Python source code | ||||
|    <Lib/threading.py>` | ||||
| 
 | ||||
| 
 | ||||
| This module defines the following functions and objects: | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Antoine Pitrou
						Antoine Pitrou