- 메모리 공유
- code 영역 O
- data 영역 O
- heap 영역 O
- stack 영역 X(스레드별로 각자 사용)
GIL : CPython 인터프리터가 동시에 하나의 스레드만 파이썬 바이트코드를 실행하도록 하는 전역 락
- 스레드들은 순차적으로 GIL을 얻었다 놓았다 하며 번갈아 실행
- 스레드 컨텍스 스위칭 시점(다른 스레드 실행)
① 일정 주기(sys.setswitchinterval)
② I/O나 sleep 같은 블로킹 함수
- CPU 연산 시 병렬 실행 불가 (스레드 전환만 일어남)
- 멀티프로세싱(multiprocessing)이나 C 확장 모듈로 해결
- CPU 바운드 작업(예: 큰 수학 계산) : bad
- 여러 스레드로 돌리면 GIL 때문에 한 번에 하나의 스레드만 바이트코드를 실행하므로 멀티코어 병렬화X
- I/O 바운드 작업(파일/네트워크/sleep) : good
- GIL을 자주 풀기 때문에 스레딩 good