brunch

멀티스레딩(ft. python GIL)

by 내가 사는 세상

멀티스레딩

- 메모리 공유

- code 영역 O

- data 영역 O

- heap 영역 O

- stack 영역 X(스레드별로 각자 사용)





python에서의 멀티스레딩 #GIL

python-gil.png


뜻, 의미

GIL : CPython 인터프리터가 동시에 하나의 스레드만 파이썬 바이트코드를 실행하도록 하는 전역 락



특이사항

- 스레드들은 순차적으로 GIL을 얻었다 놓았다 하며 번갈아 실행

- 스레드 컨텍스 스위칭 시점(다른 스레드 실행)

① 일정 주기(sys.setswitchinterval)
② I/O나 sleep 같은 블로킹 함수

- CPU 연산 시 병렬 실행 불가 (스레드 전환만 일어남)

- 멀티프로세싱(multiprocessing)이나 C 확장 모듈로 해결



실무 팁

- CPU 바운드 작업(예: 큰 수학 계산) : bad

- 여러 스레드로 돌리면 GIL 때문에 한 번에 하나의 스레드만 바이트코드를 실행하므로 멀티코어 병렬화X

- I/O 바운드 작업(파일/네트워크/sleep) : good

- GIL을 자주 풀기 때문에 스레딩 good

keyword
매거진의 이전글기초개념 - 제너레이터