Maison >développement back-end >Tutoriel Python >Méthode de mise en œuvre et analyse des principes du verrouillage global de l'interpréteur GIL en Python

Méthode de mise en œuvre et analyse des principes du verrouillage global de l'interpréteur GIL en Python

PHPz
PHPzavant
2023-04-26 15:16:081494parcourir

1. Pourquoi y a-t-il GIL

Afin d'éviter des problèmes complexes de risque de concurrence (conditions de concurrence) tels que la gestion de la mémoire

Parce que CPython utilise un grand nombre de bibliothèques de langage C, mais la plupart des bibliothèques de langage C ne sont pas natives thread-safe ( Thread la sécurité réduira les performances et augmentera la complexité)

2. Comment fonctionne GIL

Lorsque plusieurs threads sont exécutés, chaque thread verrouille le GIL lorsqu'il commence à s'exécuter pour empêcher d'autres threads de s'exécuter. De même, une fois que chaque thread a terminé une période d'exécution. , le GIL sera publié pour permettre à d'autres threads de commencer à utiliser les ressources. Il existe un autre mécanisme dans CPython appelé check_interval, l'interpréteur Python interrogera et vérifiera l'état de verrouillage du thread GIL. forcera le thread actuel à libérer le GIL, afin que d'autres threads puissent avoir une chance de s'exécuter

for (;;) {
    if (--ticker < 0) {
        ticker = check_interval;
    
        /* Give another thread a chance */
        PyThread_release_lock(interpreter_lock);
    
        /* Other threads may run now */
    
        PyThread_acquire_lock(interpreter_lock, 1);
    }
 
    bytecode = *next_instr++;
    switch (bytecode) {
        /* execute the next instruction ... */ 
    }
}

3.La sécurité des threads de Python

Avec le GIL, vous devez toujours prendre en compte la sécurité des threads lors de la programmation

4. Comment contourner GIL ?

Contournez CPython et utilisez d'autres implémentations telles que JPython (interpréteur Python implémenté en Java)

Mettez le code de performance clé dans d'autres langages (généralement C++) pour implémenter


5 Lors du traitement de tâches gourmandes en CPU, Pourquoi. le multi-threading est parfois plus lent que le monothreading ?

GIL adopte un mécanisme d'exécution des threads à tour de rôle. GIL doit basculer en permanence entre les threads ou si la durée d'exécution est longue, la perte de performances causée par la commutation peut dépasser celle d'un seul thread

6. tu penses que GIL est un bon design ?

En fait, après Python 3, il y a effectivement beaucoup de discussions sur l'amélioration voire l'annulation de GIL. Quel est votre avis Avez-vous déjà été gêné par GIL dans votre travail quotidien ?

GIL est toujours une bonne conception, même s'il perd en performances, il joue un certain rôle en garantissant que les ressources n'entreront pas en conflit et évitera les blocages

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer