multi threads(gthread)
GIL은 오직 하나의 threads만이 코드를 실행할 수 있도록 하는 python 언어의 정책
- 각 Threads는 GIL이 걸려 있는 경우 코드를 실행하지 못 하고 suspeneded된다.
- 이때 특정 시간이 지난 후에는 다른 threads의 GIL을 release 후 강제로 가져올 수 있다.
- GIL을 release한 뒤에는 특정 시간 동안 wait를 해 다시 바로 GIL을 점유하거나 suspened되는 것을 방지
- 현재 수행 중인 threads에서 IO가 발생하면 GIL을 해제한다.

- Thread A가 GIL를 점유하여 코드 수행(A : running)
- Thread B는 GIL을 점유하려 했지만, 이미 점유 상태이기 때문에 suspend(B : suspended)
- Thread B가 suspend 상태로 특정 시간이 지나, Thread A의 GIL을 강제로 release 시킨 뒤 GIL 점유(B : running)
- Thread A는 GIL이 release되었으므로 특정 시간 동안 wait한 뒤 다시 GIL 요청(A : suspended)
- Thread B가 코드 수행 중에 blocking I/O가 발생해 GIL을 release(B : I/O)
- Thread A가 GIL을 점유하여 코드 수행(A : running)
- thread B가 I/O 작업을 마치고 다시 GIL 요청(B : suspended)
- thread A의 작업 종료
- thread B가 GIL 점유 후 코드 수행(B : running)
참고
'Python(파이썬)' 카테고리의 다른 글
| python gunicorn worker (1) | 2023.12.06 |
|---|---|
| Python Fast api advanced setting (0) | 2023.12.06 |
| Python Fast API (1) | 2023.12.06 |
| python event loop (0) | 2023.12.06 |