7
votes

Comment une langue d'interprétation peut-elle éviter d'utiliser le verrouillage d'interpréter global (GIL)?

CPPHON utilise un verrouillage d'interpréteur global . Linux a supprimé toutes les traces du Big Kernel Lock . Quelle est l'alternative à ces serrures? Comment un système peut-il utiliser pleinement un système véritablement multi-noyau ou multi-processeur sans tout broyer à une halte?


9 commentaires

C Code C (appelé de CPHON) peut exécuter "Fleo-fileté" tant qu'il n'a pas besoin de saisir le gil - ce n'est qu'une restriction sur le moteur CPPHON. Je ne sais pas si Jython a des restrictions similaires.


Dupe de plusieurs des articles sous la colonne correspondante. Comme Stackoverflow.com/questions/265687/....


Jython et Ironpython n'ont pas le gil.


@lacks parce qu'ils s'appuient sur la JVM et le CLR pour gérer les filets.


@Rook La première réponse sur le lien de TYPO explique ce que l'alternative à un gil peut être.


Je ne comprends pas la comparaison de CPPHON avec Linux. C'est des pommes et des oranges.


@David Heffernan Oui peut-être un thread de pommes et d'oranges.


@Tour. Aussi lisez ceci: Stackoverflow.com/questions/991904/...


@NullUSReException qui est intéressant. C'est pourquoi j'ai posé cette question à cette question. Pour mieux comprendre de nouvelles technologies d'interpréter à venir.


4 Réponses :


2
votes

Le gil est spécifique au processus, vous pouvez donc le contourner en lançant plusieurs processus Python. Le Module multiprofessionnel fournit une API facile à utiliser pour cela.

Un autre moyen est d'utiliser des extensions C (ou d'écrire le vôtre) qui libérez le GIL tout en faisant le type de traitement de données dont vous avez besoin.


1 commentaires

Je demande comment un interprète peut éviter d'utiliser un gil.



4
votes

Un gil ne serait pas nécessaire si Python a utilisé un collecteur de déchets plus avancé comme Recycleur de IBM a été réalisé d'une méthode de comptage de référence primitive. C'est quelque chose que Swallow sans addition fait pour améliorer la performance de python. Une réponse plus prommisante est python sans charme , qui utilise sa propre implémentation de micro-thread au lieu de s'appuyer sur le fonctionnement système comme CPPHON traditionnel.


6 commentaires

... Sauf que l'hirondelle de malédend est morte, donc non.


J'ai ajouté un commentaire, pas une réponse ... Le but est que quelqu'un pouvait s'attendre à ce que le gil de CPPHON disparaisse bientôt en fonction de votre réponse. Ce ne sera pas.


Faire de la référence de Python compte des opérations atomiques (via les instructions de montage appropriées). (Je suppose que ce n'est pas si simple ou qu'ils l'auraient déjà fait)


Juste, il a été tenté d'avaler sans accepter, mais cela a été à peu près abandonné. Il semblait être trop de travail afin que les développeurs se rendaient et ont créé une autre langue ( Go ).


@Keith maintenant c'est intéressant.


PYPY est le nouveau python plus rapide mis au point avec l'aide du créateur de PSYCO. Il est plus de 3 fois plus vite que le non-accouché était, mais pas près de Cyron ni de la peau: GeetDuggal.WordPress.com/2010/11/25/...



1
votes

simple. N'avez pas d'état mutable, beaucoup comme Haskell et d'autres langages de programmation fonctionnelle font. Puisque rien dans la mémoire n'a besoin d'être changé, aucune serrure globale n'est jamais nécessaire.


1 commentaires

Mais Gil est pour la mise en œuvre des langues interprétées, pas le code, non? Haskell est généralement compilé et les compilateurs peuvent être dans des langages non fonctionnels. Même si des listes étaient interdites et que tout le monde a dû utiliser des tuples à Python, il aurait toujours besoin de la collecte des ordures, etc., n'est-ce pas?



0
votes

Vous pouvez vous débarrasser de la gil de la même manière que les gars de Linux ont été débarrassés de la grande serrure du noyau: ajoutez simplement beaucoup de serrures à grains supplémentaires ou utilisez des primitives atomiques qui n'ont pas besoin de serrures.

L'inconvénient et la raison principale Python ne le font pas, est la performance. Par exemple, l'interprète TCL n'a pas de gorme mais peut être compilé fileté et non fileté, si vous utilisez la version filetée, vous obtenez environ 10-20% de moins de performances que dans le cas unique. Donc, à moins que vous utilisiez des threads, il est effectivement plus lent. Il y a eu des correctifs de python pour ajouter des serrures plus petits, mais ceux-ci avaient même pire des impacts de performance, ainsi de rejetés.

Il s'agit simplement d'un compromis, le Python Devs a décidé que la performance de threads unique (et la compatibilité en arrière avec des extensions C) est beaucoup plus importante que l'option d'utiliser de nombreux threads sur le niveau Python. Vous pouvez toujours utiliser des threads librement dans une extension C, tout simplement pas de manière significative sur le niveau de langue Python.


0 commentaires