중화사전망 - 서예자전 - Python 에서 다중 프로세스 대신 다중 프로세스를 권장하는 이유는 무엇입니까?
Python 에서 다중 프로세스 대신 다중 프로세스를 권장하는 이유는 무엇입니까?
우리는 왜 그런지, 그리고 왜 그런지 알아야 한다. 그래서 다음과 같은 심층 연구가 있습니다.
먼저 배경을 강조하십시오.
1, GIL 은 무엇입니까?
GIL 의 전체 이름은 글로벌 인터프리터 잠금 (Global Interpreter Lock) 으로, python 설계 초기 고려사항과 데이터 보안을 위한 결정에서 비롯됩니다.
2. CPU 당 한 번에 하나의 스레드만 실행할 수 있습니다 (실제로 싱글 코어 CPU 아래의 멀티 스레드는 병렬 처리가 아닌 동시성에 불과합니다. 동시성과 병렬성은 여러 요청을 동시에 처리하는 거시적 개념이다. 그러나 동시성과 병행은 차이가 있다. 평행은 둘 이상의 이벤트가 동시에 발생한다는 것을 의미합니다. 동시성은 둘 이상의 이벤트가 같은 시간 간격 내에 발생한다는 것을 의미합니다. ) 을 참조하십시오
파이썬 멀티 스레딩에서 각 스레드의 실행 모드는 다음과 같습니다.
1, GIL 얻기
2. 수면 또는 파이썬 가상 머신이 일시 중지될 때까지 코드를 실행합니다.
3. GIL 해제
스레드가 실행되려면 먼저 GIL 을 받아야 합니다. 우리는 GIL 을' 통행증' 으로 볼 수 있지만 파이썬 프로세스에는 GIL 이 하나밖에 없습니다. 통과 할 수없는 스레드는 CPU 실행에 들어갈 수 없습니다.
Python2.x 에서 GIL 의 해제 논리는 현재 스레드가 IO 작업을 만나거나 ticks 수가100 에 도달하는 것입니다 (Ticks 는 Python 자체의 카운터로 볼 수 있으며, GIL 전용, 각 해제 후 0 이 될 수 있습니다. 이 수는 Sys.setch 를 통해 가능합니다.
그러나 GIL 잠금이 해제될 때마다 스레드는 잠금을 놓고 스레드를 전환하므로 리소스가 소모됩니다. 또한 python 의 프로세스는 GIL 잠금의 존재로 인해 동시에 하나의 스레드만 실행할 수 있습니다 (GIL 을 얻는 스레드는 실행만 가능). 이는 python 멀티 스레드 효율성이 멀티코어 CPU 에서 높지 않은 이유입니다.
그럼 파이썬의 멀티 스레딩은 완전히 쓸모가 없나요?
여기서 우리는 분류에 대해 논의합니다.
1, CPU 집약형 코드 (다양한 루프 처리, 개수 등). ), 이 경우 많은 계산 작업으로 인해 틱톡 틱톡 수가 곧 임계값에 도달한 다음 GIL 의 석방과 재경쟁 (물론 멀티 스레드 간 전환은 자원이 필요함) 을 트리거하기 때문에 python 에는 많은 것들이 있습니다.
- 관련 기사
- 사서오경의 가장 아름다운 이름
- 서예 사전을 쉬다
- 광둥어를 어떻게 배우나요?
- 꿈의 캐릭터의 오행 속성은 나무입니까, 금입니까?
- 이 한자는 500 건의 500 자 단문을 진화시켰다.
- 시를 읽는 역할은 무엇입니까 (고대시를 읽는 것의 이점은 무엇입니까)
- 세계에서 어떤 언어가 가장 배우기 어렵습니까? 러시아어, 독일어, 프랑스어, 중국어, 또 뭐가 있나요? 나는 여러 가지가 있다는 것을 기억하는데, 공식적인 설명을 찾는 것이 가장 좋다.
- 누가 중흥 N788 을 사용해 본 적이 있습니까? 효과가 좋습니까?
- 실례합니다: MATLAB 을 사용하여 0, 1 개 요소만 있는 행렬을 무작위로 생성하려면 어떻게 해야 합니까? 무슨 분부로, 감사합니다!
- 왕성과 왕성이 가장 잘 어울리는 것은 무엇입니까?