Python GIL
[PEP 703](https://texonom.com/pep-703-d00b5f9c848e434cba3a8dcc0f38ed63) 


## Python Global Interpreter Lock
**GIL이 있다고 Thread Safe 하지 않음**
GIL 은 스레드에서 사용되는 Lock 을 인터프리터 레벨로 확장한 개념인데 여러 스레드가 동시에 실행되는걸 방지
멀티 스레드로 만들었어도 본질적으로 싱글 스레드로 동작
더 정확히 말하자면 어느 시점이든 하나의 Bytecode 만이 실행되도록 강제
각 스레드는 다른 스레드에 의해 GIL 이 해제되길 기다린 후에야 실행
- C에서 thread를 사용할 때에 race condition이 일어나지 않도록 하는 것은 순전히 사용자의 몫이다.
- CPython은 생성되는 개체의 reference를 세어가면서 메모리 관리를 한다.


### 느리다
- 일단 단일 thread일 때는 아무런 문제가 없다.
- CPU가 바쁘게 계산하는 일들은 numpy/scipy에서 GIL 바깥에서 굉장히 효율적인 C 코드로 연산할 수 있다.
- 병렬 처리에 관해서는 굳이 thread가 아니더라도 multiprocessing이나 asyncio 등의 많은 선택지가 있다.
- 굳이 thread 간의 동시적인 처리가 필요하다면 다른 Python implementation을 고려해봐도 된다. Jython, IronPython, Stackless Python, PyPy 등이 있다.


### 장점
- 레퍼런스 카운팅을 사용하는 메모리 관리 방식에서 GIL 덕분에 오버헤드가 적어 싱글 스레드일 때 fine grained lock 방식보다 성능이 우월
- 구현이 쉼다
- C extension 을 활용할 때 GIL 은 해제되므로 C library 를 사용하는 CPU bound 프로그램을 멀티 스레드로 실행하는 경우 더 빠를 수 있다



### Why
> [왜 Python에는 GIL이 있는가](https://dgkim5360.tistory.com/entry/understanding-the-global-interpreter-lock-of-cpython)

### Thread Safe
> [python gil이 있으니까 thread safe 할까요?](https://codingdog.tistory.com/entry/python-gil%EC%9D%B4-%EC%9E%88%EC%9C%BC%EB%8B%88%EA%B9%8C-thread-safe-%ED%95%A0%EA%B9%8C%EC%9A%94)

> [Interview_Question_for_Beginner/Python at master · JaeYeopHan/Interview_Question_for_Beginner](https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Python#celery)

### Without GIL
> [Being an effective engineer : 네이버 블로그](https://blog.naver.com/parkjy76/30167429369)

> [A GIL-less Future for Python Beckons Developers](https://analyticsindiamag.com/a-gil-less-future-for-python-beckons-developers)





