175 votes

Pourquoi n'y a-t-il pas de GIL dans la machine virtuelle Java? Pourquoi Python en a-t-il vraiment besoin?

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.

220voto

Alex Martelli Points 330805

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)."

50voto

Greg Bowyer Points 959

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)

7voto

user235859 Points 848

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X