2013-02-08 10 views
4

저는 몇 시간 씩 책을 읽었으며 파이썬 멀티 스레딩이 단일 스레드보다 얼마나 빠른 지 완전히 파악할 수 있습니다.파이썬과 진정한 동시 스레드

이 질문은 실제로 GIL에서 비롯됩니다. GIL이 있고 하나의 스레드 만이 한 번에 실제로 실행되는 경우 어떻게 다중 스레드가 단일 스레드보다 더 빠를 수 있습니까?

필자는 GIL이 릴리스 된 일부 작업 (파일에 쓰는 것과 같음)을 읽었습니다. 멀티 스레딩이 빨라지는 이유는 무엇입니까?

그리고 그린렛에 대해서. 어떻게 동시성에 도움이 되는가? 지금까지 내가보기에 모든 목적은 기능 간 전환과 덜 복잡한 출력 기능입니다.

편집 : 세계에서 토네이도 같은 서버가 수천 개의 동시 연결을 처리하는 방법은 무엇입니까?

답변

8

당신이 맞습니다 - 파이썬이 C 코드 실행을 기다리고있을 때 GIL이 해제되고 그 속도가 빨라질 수 있습니다. 그러나 한 번에 한 줄의 파이썬 만 실행할 수 있습니다. 이것은 CPython (구현) 세부 사항이며 엄격히 말하면 Python 언어 자체의 일부가 아닙니다. 예 : Jython and IronPython have no GIL and can fully exploit multiprocessor systems.

CPython에서 진정으로 동시 프로그래밍이 필요하다면 스레딩보다는 multiprocessing을 봐야합니다.

+0

+1 GIL과 관련된 유용한 답변입니다. GIL은 CPU 바인딩 프로세스에만 중요합니다. IO 바인딩 프로세스는 GIL이 존재하더라도 스레딩 (응답 성 등)의 이점을 여전히 얻습니다. 또한 OP는 Tornado의 성능에 대해 질문했습니다. 즉, 비 차단 입출력을 사용하므로 이벤트 루프에 스레드가 필요하지 않습니다. –