J’espère que quelqu'un peut se faire une idée quant à ce qui est fondamentalement différent sur la Machine virtuelle Java qui lui permet de mettre en œuvre des discussions bien sans avoir besoin pour un verrou Global de l’interprète (GIL), tandis que Python nécessite un tel mal.
Réponses
Trop de publicités?Python (langage) n'a pas besoin d'un GIL (qui est pourquoi il peut parfaitement être mis en œuvre sur la JVM [Python] et .NET [IronPython], et ces implémentations multithread librement). Disponible (le populaire mise en œuvre) a toujours utilisé un GIL pour la facilité de codage (esp. le codage de la collecte des ordures mécanismes), et de l'intégration de la non-thread-safe C-codé bibliothèques (il y a une tonne de ceux qui l'entourent;-).
Le Vide Avaler projet, parmi d'autres objectifs ambitieux, n' plan d' un GIL-de machine virtuelle gratuite pour Python-pour citer ce site, "En outre, nous avons l'intention de supprimer le GIL et de fixer l'état du multithreading en Python. Nous croyons que ceci est possible grâce à la mise en œuvre d'un plus sophistiqué GC système, quelque chose comme IBM Recycleur (Bacon et al, 2001)."
La JVM (au moins hotspot) n'ont un concept similaire à la "GIL", c'est juste beaucoup plus fine dans sa serrure granularité, la plupart de ceci vient de l'GC hotspot qui sont plus avancés.
Dans Disponible son d'une grande écluse (probablement pas vrai, mais assez bon pour l'amour du arguments), dans la JVM de ses plus étendue avec des concepts différents selon l'endroit où il est utilisé.
Regardez, par exemple, vm/runtime/point de restauration.hpp dans le hotspot code, qui est effectivement un obstacle. Une fois à un point de restauration de l'ensemble de la VM s'est arrêté à l'égard de code java, un peu comme le python VM s'arrête à la GIL.
Dans le monde Java, tels VM pause événements sont connus comme des "cessez-le-monde", à ces points seulement du code natif qui est liée à certains critères est libre en cours d'exécution, le reste de la machine virtuelle a été arrêté.
Aussi à l'absence d'un cours de verrouillage en java rend JNI beaucoup plus difficile à écrire, comme la JVM fait moins de garanties sur son environnement pour FFI appels, l'une des choses qui rend disponible assez facile (bien que pas aussi facile que l'utilisation de ctypes)
Il y a un commentaire vers le bas ci-dessous dans ce post de blog http://www.grouplens.org/node/244 qui fait allusion à la raison pourquoi il était si facile a GIL pour IronPython ou Jython, c’est que CPython utilise de décompte de références alors que 2 autres ordinateurs virtuels ont ordures collectionneurs.
Le mécanisme exact de pourquoi c’est si je ne reçois pas, mais il ne sonne comme une raison plausible.