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)