본문 바로가기

반응형

Lock

(2)
파이썬의 GIL 사용 이유 파이썬 구현체 CPython의 GIL (Global Interpreter Lock)은 파이썬 바이트코드를 실행할 때, 여러 쓰레드 중 하나의 쓰레드만이 파이썬 객체에 접근할 수 있게 하는 mutex (mutual exclusive) 로서 하나의 프로세스의 공유 리소스를 하나의 쓰레드만이 점유하게 하는 장치입니다. 따라서 파일 읽기/쓰기, 네트워크 통신 등과 같은 I/O 작업이 아닌 행렬연산, 이미지처리 등 CPU를 많이 사용하는 작업에 대해서는 파이썬의 멀티쓰레드로는 성능향상을 기대할 수 없는데요, 다음 코드를 보면 다중쓰레드가 락 (mutex)의 획득, 해제에 따른 오버헤드로 인해 실행 시간이 더 길게됩니다. # single_threaded.py import time from threading impo..
GIL (Global Interpreter Lock), Multi-Threading 파이썬의 표준 구현을 CPython 이라고 합니다. CPython은 1) 소스 코드를 구문 분석해서 8비트 명령어로 이루어진 바이트코드 (파이썬 3.6 부터는 16비트 명령어를 사용하므로 워드코드) 로 변환하고, 2) 스택 기반 인터프리터를 통해 바이트코드를 실행합니다. 바이트코드 인터프리터에는 파이썬 프로그램이 실행되는 동안 일관성 있게 유지해야 하는 상태가 존재하는데 CPython은 스레드 세이프하지 않은 메모리 관리를 쉽게 하기 위해, GIL (Global Interpreter Lock) 이라는 방법으로 여러 개의 스레드의 메모리 접근을 제한하는 형태로 일관성을 강제로 유지합니다. 즉, Figure 1에서 처럼 여러 개의 스레드가 병렬로 존재한다고 하더라도 실제로는 특정 순간에 하나의 스레드만 동작..

반응형