블로킹 I/O와 GIL

매일 공부(ML)·2023년 5월 17일
0

Fluent Python

목록 보기
123/130

제어흐름

Future를 이용한 동시성

블로킹 I/O와 GIL

CPython 인터프리터는 내부적으로 스레드가 안전하지 않기에, 전역 인터프리터 락(GIL)을 가지고 있고, GIL은 한 번에 한 스레드만 파이썬 바이트코드를 실행하다록 제한한다. 그렇기 때문에 단일 파이썬 프로세스가 동시에 다중 CPU 코어를 사용할 수 없다.

물론, 파이썬 코드를 작성할 때 우리는 GIL을 제어할 수 없지만, 내장 함수나 C로 작성된 확장은 시간이 오래 걸리는 작업을 실행할 때 GIL을 해제할 수 있다.

블로킹 입출력을 실행하는 모든 표준 라이브러리 함수는 OS에서 결과를 기다리는 동안 GIL을 해체한다. 즉, 입출력 위주의 작업을 실행하는 파이썬 프로그램은 파이썬으로 구현하더라도 스레드를 이용함으로써 이득을 볼 수 있다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글