티스토리 뷰

python

GIL, CPython, IPython

주먹불끈 2023. 7. 10. 00:52

출처: https://realpython.com/python-gil/

개요

긱뉴스를 통해서 GIL 관련한 이야기를 듣게 되었다. 파이썬을 간단히 다루어보기는 했지만 현업에서 진지하게 사용해본 경험은 없는지라 GIL이라는 키워드를 매번 흘려 듣고 넘어갔었는데 최근에 파이썬을 좀더 들여다보고 싶은 상황이기도 해서 이 참에 좀더 들여다보려 한다.

긱뉴스: https://news.hada.io/topic?id=9693#cid17120

원문: https://discuss.python.org/t/a-fast-free-threading-python/27903/99 

GIL(Global Interpreter Lock)

(GPT-4의 도움을 받아 정리해보았다.)

파이썬은 그 코드를 CPython 인터프리터라는 녀석의 도움을 받아서 컴퓨터가 실행할 수 있는 코드로 변환을 해주는데 CPython에서 GIL을 사용한다. GIL은 싱글 프로세스에서 한 번에 하나의 스레드만이 Python 바이트코드를 실행하게 하는 뮤텍스인데, 다중 코어에서도 마찬가지로 작동한다.

이처럼 엄격하게 관리를 하면 장점은 여러 스레드가 동시에 Python 바이트코드를 실행하지 못하게 하고, 메모리 관리 문제를 일으키는 것을 방지해준다. CPython은 스레드 안전(thread-safe)하지 않다. 한마디로 여러 스레드가 동시에 실행되면 동시에 같은 메모리를 접근할 수 있다는 것이 되어버려서 문제가 될 수 있는데 그것이 원천차단되는 것이다.

단점은 하나의 프로세스에서도 여러 스레드를 동시실행시키면 속도가 빨라지고(시분할이겠지?) 멀티 프로세스라면 그야말로 여러 작업을 동시에 할 수 있음에도 한 번에 하나의 일만 할 수 있으니 성능이 뚝 떨어지게 된다. 물론 CPU 바운드 작업에만 해당되고 네트워크나 입출력 바운드 작업에서는 GIL을 풀어준다.

이러한 GIL을 disable 해주면 성능이 확 올라가겠지만 이게 말처럼 쉽지 않은 이유는 CPython의 메모리 관리 코드 여기저기에 관여되어 있기 때문이다. 그래서 위 긱뉴스에서 언급된 이야기가 나오는 것이다.

참고 사항 몇가지를 덧붙여보자면

  • Jython이나 IronPython은 GIL이 없다
  • 멀티 스레드는 안되지만 멀티 프로세싱은 되게 하는 편법, NumPy나 Cython 같은 확장으로 계산집약적인 작업일때는 잠시 GIL을 해주는 방법을 제공한다.

CPython

파이썬에서 가장 널리 사용하는 인터프리터이다. 컴파일러가 아니기에 라인단위로 처리를 한다. CPython이라는 이름에서 알 수 있듯이 C언어로 쓰여졌다. 참고로, Jython(Java 환경용), IronPython(닷넷, C# 환경용) 같은 녀석도 있다. 각각은 장단점이 있다.

IPython(Interactive Python)

주피터 노트북 같은 인터렉티브 환경에서 널리 사용되는 인터프리터이다. 사용자가 좀더 쉽게 사용할 수 있도록 댜양한 기능을 넣었다. - code completion, introsecption, rich media, command history 등등

주피터 노트북이라는 웹기반 인터렉티브 플랫폼에 통합되어 있어서 코드를 포함한 문서를 생성하고 공유하기 좋다. IPython의 커널영역이 주피터 노트북의 파이썬 코드를 기계어로 번역하고 실행해준다.

일반적인 용도로 CPython을 쓴다면 IPython은 여러 추가기능으로 좀더 인터렉티브한 작업을 할 수 있도록 해준다고 생각하면 되겠다.

반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함