본문 바로가기
기술면접

파이썬 GIL 이란?

by 붕어사랑 티스토리 2021. 4. 17.
반응형

모 해외 시스템 반도체 회사에서 GIL이 뭔지 물어봤다길래 정리해본다.

 

 

 

GIL(Global Interpreter Lock)

 

일단 이놈은 파이썬 버전 뮤텍스라고 생각하면 편하다.

허나 c/c++에서 알고있는 그 뮤텍스와 큰 차이가 있다.

파이썬의 멀티스레딩도 c/c++과 큰 차이가 있고.

 

결론부터 말하면 파이썬에서 스레드로 병렬 프로그래밍을 짜면

각각의 스레드가 c/c++처럼 한번에 여러작업을 수행하지 않는다.

이놈의 GIL 때문이다.

 

 

파이썬은 하나의 프로세스 안에 모든 자원을 Global하게 Lock 한다.

스레드는 프로세스 안에 자원을 공유하는데 모든 자원을 Global하게 Lock해버리면

한번에 하나의 스레드만 작업을 하게 된다.

 

 

 

아니 그럼 멀티스레딩이 의미 없잖아?

거의 맞는말이지만 I/O 작업을 할때는 멀티스레딩이 효과가 있다고는 한다.

 

 

 

 

왜 그렇게 만들었지?

찾아보니 데드락 막을수 있고 가비지 컬렉터 구현이 쉽고 이렇게 진지하게 어쩌구 저쩌구 써놨는데...

 

"파이썬에서 멀티쓰레딩 구현하기 힘들어서 그랬어 ㅠㅠ" 라는 내용이다...

 

ㅠㅠ 좀더 기술이 발전했으면

 

 

그럼 파이썬에서 병렬 프로그래밍을 어떻게 해야돼?

멀티 프로세싱을 이용하라고 한다. subprocess() 함수를 이용하자

 

 

반응형

댓글