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
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é)
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
4. Comment contourner GIL ?
5 Lors du traitement de tâches gourmandes en CPU, Pourquoi. le multi-threading est parfois plus lent que le monothreading ?
6. tu penses que GIL est un bon design ?
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!