2009-12-16 15 views
11

Właśnie widziałem this section of Unladen Swallow's documentation wymyślone w Wiadomościach Hackera. Zasadniczo inżynierowie Google twierdzą, że nie są optymistami w usuwaniu GIL. Wydaje się jednak, że dyskusja na temat śmieciarza przeplata się z tym wykładem o GIL. Czy ktoś mógłby wyjaśnić mi związek?Co GIL Pythona ma wspólnego z śmieciarzem?

+2

Cóż, przeczytaj o GIL. http://wiki.python.org/moin/GlobalInterpreterLock Jak widać, wszystko zależy od zarządzania pamięcią. –

Odpowiedz

17

Bardzo krótka wersja polega na tym, że obecnie python zarządza pamięcią z licznikiem odwołań + znacznik & schemat cyklu zbierania danych, zoptymalizowany pod kątem opóźnień (zamiast przepustowości).

Wszystko jest w porządku, gdy istnieje tylko jeden mutujący wątek, ale w systemie wielowątkowym należy zsynchronizować wszystkie czasy modyfikacji refkont, albo też można mieć wartości "spaść przez pęknięcia", i prymitywy synchronizacji są dość kosztowne na współczesnym sprzęcie.

Jeśli refliksy nie były tak często zmieniane, nie byłoby to problemem, ale prawie każda operacja wykonywana w cpythonie może spowodować zmianę gdzieś rekuperacji, więc opcje są albo GIL, wykonując refcounts z niektórymi rodzaj synchronizacji (i dosłownie spędzaj prawie cały swój czas na synchronizacji) lub porzuć system refcounting dla jakiegoś prawdziwego śmieciarza.

1

Odpowiedź Tuna-Fish w zasadzie ją pokrywa. Jeśli chcesz więcej szczegółów, była dyskusja o tym, jak GIL można usunąć bez konieczności zbyt większego wpływu na odniesienie liczenia tutaj: http://mail.python.org/pipermail/python-ideas/2009-October/006264.html

+0

Sugestia w tym linku była naiwna. Używanie porównania i zamiany do liczenia odwołań jest zbyt wolne. –