Global Interpreter Lock
한 CPU만 일함.! 다중 CPU 환경에서 동시에 여러 파이썬 코드를 병렬로 실행할 수 없음.
- 인터프리터의 구현이 쉬워짐
- Garbage Collector 만들기 조음
- C/C++ 확장 만들기 만들기 쉬움.
프로그램에 I/O 작업을 많이하면 파이썬 쓰레드도 좋음.
우리가 하는 일반 프로그래밍은 I/O Bound
계산을 많이 하는 작업 쓰레드 -> 프로세스
다중 CPU에서 병렬 실행을 위해서는 다중 프로세스를 이용하는 multiprocessing 모듈을 사용함. 프로그램에 I/O 작업을 많이하면 파이썬 쓰레드도 좋음.
우리가 하는 일반 프로그래밍은 I/O Bound
계산을 많이 하는 작업 쓰레드 -> 프로세스
다중 CPU에서 병렬 실행을 위해서는 다중 프로세스를 이용하는 multiprocessing 모듈을 사용함.
1 |
|
Process
운영체제가 작업하는 단위
Thread
이 Process 안에서 공유되는 메모리를 바탕으로여러 작업을 생성하는 작업 단위. -> 각 thread마다 할단된 개인적인 메모리가 있으면서 thread가 속한 process가 가지는 메모리에도접근가능함.
Race condition
여러 thread가 공유된 데이터를 변경함으로써 발생하는 문제.
“Thread-safe 하다” thread들이 race condition을 발생시키지 않으면서 각자의 일을 수행한다는 뜻.
Mutex
- Thread-safe한 코드를 만들기 위해서 사용하는 것 중 하나.
- Race condition을 막기 위해 공유되는 메모리의 데이터를 여러 thread가 동시에 사용할 수 없도록 잠그는일을 맡음.
- thread: 각 남자들
- mutex: 공중 전화 부스의 문
- lock: 그 문을 잡고 있는 남자의 손
- resource: 공중 전화
CPython reference counting 을 하는 과정에서 Rece condition이 일어나면 그 결과는 메모리 유실/object가 죽음이 발생
이를 해결하기 위해 mutex사용 -> object 하나하나 마다 대응하는 mutex가 필요함! 성능적으로 많은 손해, deadlock 위험상황
CPython의 결정 mutex를 통해 모든 reference 개수를 일일히 보호하지 말고 python interpreter자체를 잠구자! -> 오직 한 thread만이 python 코드를 사용할 수 있음 한 프로세스 안에서 여러 쓰레드를 이용한 병렬처리를 막음.
한 쓰레드가 파이썬코드를 실행하기 위해선 공중전화 박스에 들어가 interpreter lock을 잡아야함!
그래서 Global Interpreter Lock