r잡초처럼
바른 프로그래밍
r잡초처럼
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • FastAPI (7)
    • 끄적끄적 (2)
    • Python (17)
    • Django (31)
    • Database (2)
    • Docker (7)
    • 디자인패턴 (2)
    • CS 공부 (12)
      • 알고리즘 (2)
      • 자료 구조 (1)
      • 네트워크 (7)
      • IT 지식 (1)
      • 운영체제 (1)
    • 기타 팁들 (10)
    • Aws (2)
    • 독서 (1)
    • 코딩테스트 공부 (1)
      • 백준 (0)
      • 프로그래머스 (1)
    • DevOps (13)
    • TIL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • poetry
  • depends
  • 완벽한 IT 인프라 구축을 위한 Docker
  • cp949
  • pycharm
  • validate
  • 컴퓨터 기본 지식
  • Batch
  • 전기 신호
  • 랜 카드
  • 상속 안티 패턴
  • CS 지식
  • 모두의 네트워크
  • 파이썬 클린 코드
  • 상속과 컴포지션
  • 5장 회사에서 하는 랜 구성
  • 네트워크
  • pytest
  • fastapi
  • 6장
  • 물리 계층
  • docker
  • 책 리뷰
  • preonboarding
  • 케이블의 종류
  • query param
  • dotenv
  • 랜과 왠
  • 7장
  • encoding

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
r잡초처럼

바른 프로그래밍

Python

[Python] GIL이 뭐죠?

2022. 12. 21. 22:47

오늘 면접 보다가 GIL 관련 얘기가 나왔다. 이름은 들어봤다. 보기도 봤고, 하지만 설명할 수 없었다. 그럼 모르는 거지....

GIL이 뭔지 파헤쳐보자.

1. GIL이란?

GIL은 Global Interpreter Lock의 약자이다. 이게 뭔고 하니 Python 문서에서 살펴보니 다음과 같이 설명한다.

In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once.

Python 개체에 대한 엑세스를 보호하며 여러 스레드가 Python 바이트 코드를 한 번에 실행하는 것을 방지하는 뮤텍스입니다.

그렇다면 왜 여러 스레드가 실행하는 것을 막을까?

바로 스레드 안정성 때문에 그렇다.(참고) Python  스레드는 동일한 메모리를 공유하는데, 이때 여러 스레드가 동시에 실행되는 경우 스레드가 공유 데이터에 액세스 하는 순서를 알 수 없다.(Race Condition) 이렇게 CPython의 메모리 관리가 스레드로부터 안전하지 않기 때문에 GIL을 발명했다고 설명한다. 결국 한 프로세스는 하나의 스레드만 실행되므로 CPython은 공유 메모리의 경합 상태가 발생하지 않는다. 

2. 그렇다면 멀티 스레딩을 사용할 수 없을까?

파이썬에서 멀티 스레딩을 하려고 구글링을 하다보면 싱글 스레딩을 할 때보다 성능이 저하된다고 설명한다. 그렇다면 멀티 스레딩은 파이썬에서 쓸모가 없을까? 결론부터 말하자면 쓸모가 있다. 예를 들어 외부 연산(I/O, Sleep 등)과 같이 공유 자원으로 접근을 하는 작업을 할 때에는 멀티 스레딩이 큰 덕을 볼 수 있다.


자세한 내용은 이 블로그에 친절하게 쓰여있으니 읽어보도록 하자.


참고

1. https://wiki.python.org/moin/GlobalInterpreterLock

 

GlobalInterpreterLock - Python Wiki

In CPython, the global interpreter lock, or GIL, is a mutex that protects access to Python objects, preventing multiple threads from executing Python bytecodes at once. The GIL prevents race conditions and ensures thread safety. A nice explanation of how t

wiki.python.org

2. https://it-eldorado.tistory.com/160

 

[Python] GIL (Global Interpreter Lock) 이해하기

이번 포스팅은 Python만의 특징 중 하나인 GIL(Global Interpreter Lock)의 개념에 대해 알아볼 것이다. Python 프로그래머라면 한 번쯤은 들어봤을 법한 용어지만, 정확하게 알고 있지 못한 분들도 많을 것

it-eldorado.tistory.com

3. https://python.land/python-concurrency/the-python-gil

 

The Python GIL (Global Interpreter Lock)

The Python GIL makes sure there is only one thread running at any time, which is both a blessing and a curse.

python.land

 

'Python' 카테고리의 다른 글

Python 3.10 변경점 알아보기 - 1. Parenthesized context managers, Better error messages  (0) 2023.01.28
WSL2 환경에서 Poetry 사용하기  (0) 2023.01.16
[Celery] - 시작하기  (0) 2022.12.08
컴파일이란  (0) 2022.12.07
Python 알아보기(1) - 파이썬의 특징  (2) 2022.12.06
    'Python' 카테고리의 다른 글
    • Python 3.10 변경점 알아보기 - 1. Parenthesized context managers, Better error messages
    • WSL2 환경에서 Poetry 사용하기
    • [Celery] - 시작하기
    • 컴파일이란
    r잡초처럼
    r잡초처럼
    오늘보다 내일 더 나은 개발자가 되기 위한 노력을 기록하는 블로그 입니다.

    티스토리툴바