Python sans GIL

La proposition de retirer le GIL (Global Interpreter Lock) a été acceptée, permettant le multi-threading natif en Python : What's up, Python? The GIL removed, a new compiler, optparse deprecated...

Ma question est plutôt historique : si le GIL était un si gros frein, pourquoi avoir basé Python sur ce dispositif mono-thread ? Est-ce qu’en 1991, on ne savait pas que les ordinateurs allaient devenir multiprocesseurs et mutli-thread ? Pourquoi ne pas avoir codé Python directement sans GIL (TCL est un langage interprété sans GIL) ? Est-ce juste par ce que c’était plus facile vis à vis de la libc ?

( et j’espère qu’il y aura un guide migration en fr …)

Merci bien d’avance.

Salut,

Si j’ai bien compris, le GIL permet d’utiliser un garbage collector :wastebasket: pour supprimer les objets qui ne sont plus référencés avec de simples compteurs de nombres de références sans se soucier de la possibilité qu’un autre thread tient une référence a l’objet. Une autre solution serait d’appliquer un lock sur les objets lorsque un thread en prend possession mais ca prend du temps donc tout ton code tourne plus lentement pour permettre deux threads de tourner en meme temps. Avec peu de procs par machine dans les années 90 le jeu en valait pas la chandelle. Aujourd’hui on va toujours vers plus de procs alors …

L’idée de remplacement : on garde le mécanisme de reference counter. Mais on n’utilise pas d’opérations atomiques (et lentes) de modification de ce compteur si le thread qui modifie le compteur est le possesseur de la variable (ce qui est la plupart du temps le cas). Du coup, cela n’impacte pas les performances mono-thread. Pour les autres threads, on utilise des opérations atomiques. Plus de détail dans la PEP 703 : PEP 703 – Making the Global Interpreter Lock Optional in CPython | peps.python.org

1 « J'aime »