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?
Répondre
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.
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
- 1. Python, Threads, le GIL, et C++
- 2. Pourquoi C++ nécessite un cast pour malloc() mais pas C?
- 3. Ruby nécessite 'fichier' ne fonctionne pas, mais nécessite './fichier' fait. Pourquoi?
- 4. Pourquoi mes images ne se chargent pas dans IE mais le font dans le navigateur xx?
- 5. Pourquoi le travail relatif ne nécessite pas Ruby 1.8.6?
- 6. Extensions Python qui peuvent être utilisées dans toutes les variétés de python (jython/IronPython/etc)
- 7. Les événements Manipulation et Touch ne se déclenchent pas, mais les événements souris le font?
- 8. Intégration de Jython et de Python
- 9. Pourquoi le code IronPython échoue?
- 10. @ font-face et CSS3 travaillant localement mais pas sur l'hébergement
- 11. Libération de Python GIL en code C++
- 12. Pourquoi est IronPython plus rapide que le Python officiel interprète
- 13. Le Python GIL est-il vraiment par interprète?
- 14. pourquoi sensorManager.registerListener nécessite un gestionnaire?
- 15. @ font-face ne fonctionne pas
- 16. Le champ SharePoint n'est pas requis mais nécessite une entrée.
- 17. Gem installé et nécessite mais "Constante manquant"
- 18. BlueZ, ne nécessite pas d'authentification
- 19. Problème de déploiement MVC - Charges de sites mais les liaisons (routes) ne le font pas
- 20. Powershell intégration avec Python (pas IronPython)
- 21. nécessite 'rubygems' pour Linux mais pas dans Windows. Pourquoi? et puis-je résoudre ce problème?
- 22. projet Jython dans Eclipse ne peut pas trouver le module XML, mais fonctionne dans un projet identique
- 23. Ne peut pas utiliser DateTime dans IronPython
- 24. Bibliothèque d'archivage python (jython)
- 25. nécessite 'rubygems' ne fonctionne pas
- 26. pourquoi python ne trouve pas de travail
- 27. Pourquoi MongoDB ne s'étend-il pas à un objet pour pouvoir utiliser a.tojson() mais nécessite encore tojson (a)?
- 28. pourquoi does netbeans ne supporte pas python et django?
- 29. Python, IronPython Mono
- 30. Un framework de type NSSound qui fonctionne, mais qui ne nécessite pas de courbe d'apprentissage abrupte
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. –
@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