2010-08-07 6 views
4

왜 GIL을 필요로하지 않고 Jython과 IronPython을 실행할 수 있지만 Python (CPython)은 GIL이 필요합니까?파이썬에는 GIL이 필요합니다. 그러나 Jython & IronPython은 그렇지 않습니다. 왜?

+2

참조 http://stackoverflow.com/questions/991904/why-is-there-no-gil-in-the- java-virtual-machine-why-does-python-need-one-so-bad/991917 # 991917. –

+1

@Alex Martelli, 그 게시물은 실제로 같은 질문을 던졌습니다. 그러나 대답은 cpython이 GIL을 필요로하는 이유를 설명하지 않습니다. – JamesD

답변

2

CPython이 빌드 된 C 라이브러리는 스레드로부터 안전하지 않기 때문에 추측됩니다. Jython과 IronPython은 각각 Java와 .Net에 대해 빌드됩니다.

8

인터프리터의 일부는 스레드 세이프가 아닙니다. 대용량의 잠금 사용으로 인해 모든 스레드가 안전하지 않은 경우 단일 스레드가 매우 느려질 수 있기 때문에 대부분 (source)입니다. 이것은 참조 카운팅을 사용하는 CPython 가비지 컬렉터와 관련이있는 것 같습니다 (JVM 및 CLR은 그렇지 않으므로 매번 참조 카운트를 잠 그거나 해제 할 필요가 없습니다). 그러나 누군가가 받아 들일 수있는 해결책을 생각하고 그것을 구현 했더라도 제 3 자 라이브러리는 여전히 동일한 문제를 가지고 있습니다. C로 작성된 확장 실제로 GIL을 제거 할 수

참고 : http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock