나는 "나는 단지 그것을 이해하고 싶다"라는 질문을 가지고 있습니다. 먼저, 우분투에서 파이썬 2.6.5를 사용하고 있습니다.파이썬 스레드 및 소켓
그래서 스레드 모듈을 통해 파이썬의 스레드는 "스레드"일 뿐이며 GIL에게 특정 시간 동안 각 "스레드"의 코드 블록을 실행하도록 지시합니다. 사실 여기 실제 스레드가 아닙니다 ..
그래서 제가 한 스레드에서 블로킹 소켓을 가지고 있고 지금은 5 초 동안 데이터를 보내고 스레드를 차단하고 있습니다. 스레드를 차단하는 하나의 C 명령 (sock.send
)이기 때문에 모든 프로그램을 차단할 것으로 예상됩니다. 그러나 주 스레드가 계속 실행되는 것을보고 놀랐습니다. 그러면 GIL이 send와 같은 차단 명령에 도달 한 후 나머지 코드를 어떻게 계속 실행할 수 있습니까? 여기에 진짜 스레드를 사용해야하지 않습니까?
감사합니다. 언급 wiki page on GIL
그래서 만약 내가 x 소켓 (또는 다른 I/O 개체), 그리고 그들 모두 백그라운드 (서버)에서 처리됩니다, 나는 2 진짜 스레드 : GIL과 GIL 밖에 있으므로 하나의 소켓 차단, 다른 차단됩니다 너무? 아니면 실제 스레드가 있습니까? (내가 말할 때 "x 개의 스레드가있다"는 의미 - 같은 시간에 x 개의 실제 스레드가있을 수 있습니다. 심지어 초 미만이라 할지라도) – RoeeK
글쎄, 테스트 후 - 나는 실제 스레드 인 것 같습니다. 이제는 상황을 더 분명하게 만듭니다. – RoeeK