Python a-z

Twoje centrum interaktywnej nauki Pythona: fiszki, przykłady kodu i edytor w przeglądarce.

Poziom: zaawansowany Fiszka #148 · Python

Jakie są możliwości i ograniczenia GIL (Global Interpreter Lock)?

💡 Wskazówka do nauki: Zanim odsłonisz odpowiedź poniżej, spróbuj samodzielnie sformułować definicję lub napisać krótki przykład kodu w głowie (albo w naszym edytorze online).

Pokaż odpowiedź i przykład kodu

Opis i wyjaśnienie:

GIL to mechanizm synchronizacji, który ogranicza wykonanie kodu bajtowego Pythona do jednego wątku naraz w programie. Ogranicza to możliwości wielowątkowe Pythona na wielordzeniowych procesorach, ale jest konieczne do zarządzania pamięcią i zapewnienia bezpieczeństwa wątków. Alternatywą dla wielowątkowości są procesy (używając modułu multiprocessing) lub programowanie asynchroniczne (asyncio).

Przykład w Pythonie:

import threading
licznik = 0
lock = threading.Lock()

def inc():
    global licznik
    for _ in range(100000):
        with lock:
            licznik += 1

ths = [threading.Thread(target=inc) for _ in range(4)]
[t.start() for t in ths]
[t.join() for t in ths]
print(licznik)