2010-08-07 4 views
4

Pourquoi est-ce que vous pouvez exécuter Jython et IronPython sans avoir besoin d'un GIL mais Python (CPython) nécessite un GIL?Python nécessite un GIL. Mais Jython et IronPython ne le font pas. Pourquoi?

+2

Voir http://stackoverflow.com/questions/991904/why-is-there-no-gil-in-the- java-virtual-machine-pourquoi-does-python-need-one-so-bad/991917 # 991917. –

+1

@Alex Martelli, ce poste ne fait qu'actuellement posé la même question MAIS pas de réponse explique pourquoi cpython nécessite un GIL. – JamesD

Répondre

2

Je suppose, car les bibliothèques C sur lesquelles CPython est basé ne sont pas adaptées aux threads. Alors que Jython et IronPython sont construits respectivement avec Java et .Net.

8

Les parties de l'interpréteur ne sont pas threadsafe, bien que la plupart du temps parce que les rendre toutes threadsafe par l'utilisation massive de verrouillage ralentirait extrêmement (source). Cela semble être lié au garbage collector CPython utilisant le comptage de références (la JVM et le CLR ne le font pas, et n'ont donc pas besoin de verrouiller/libérer un compte de référence à chaque fois). Mais même si quelqu'un pensait à une solution acceptable et la mettait en œuvre, les bibliothèques tierces auraient toujours les mêmes problèmes.

Notez que les extensions écrites en C peuvent en fait se débarrasser de la GIL: http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock

Questions connexes