블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형
파이썬의 정책에 의해 멀티 스레드 방식으로 프로그램을 구현하더라도, (번갈아가면서) 하나의 스레드만 실행하게된다.
그래서, 파이썬에서는 멀티 스레드를 통해 원하던 효과를 제대로 볼 수 없다.
아래 GIL에 의해서 하나의 스레드만 실행이 된다.
GIL(Global Interpreter Lock)?
파이썬은 모든 자원을 하나의 스레드에서 컨트롤할 수 있게 글로벌 락(Global Lock
)을 걸어둔다.
GIL 은 하나의 스레드(Thread
)에게 모든 자원(Resource
)을 점유할 수 있게 해준다. (다른 스레드는 Acquire
할 수 없음)
그렇다고 스레드가 쓸모없는 것은 아니다. 하나의 스레드가 I/O 작업을 하는 동안은 다른 스레드가 점유할 수 있다.
- I/O 작업이 없는 프로그램이라면, 멀티 스레드 방식으로 구현하면
Context Switching
때문에 역효과가 나올 수 있음 - 반대로 I/O 작업이 많다면 파이썬의 멀티 스레드 방식으로도 효과를 얻을 수 있음
왜 GIL을 사용할까?
thread safe
와 관련이 있는데, 병렬 프로그램은 공유 자원에 동시에 접근하다보니 경쟁 상태(rade condition
)에 빠질 수 있다.
파이썬에서는 thread safe
를 위해 인터프리터를 잠그는 방식을 택했다.
결론
솔직히 자세히 살펴보기전에는 파이썬의 스레드는 글로벌 락에 의해 좋지 않는 성질을 가지기 때문에, 멀티 프로세싱 방식을 쓰는 것이 좋은 줄 알았다.
하지만, 상황에 따라 멀티 스레드를 사용해도 괜찮다는 것을 알 수 있었다.
Reference
반응형
'Language > Python' 카테고리의 다른 글
python으로 qrcode 생성기 만들기 (0) | 2020.08.08 |
---|---|
Python3 문자열에서 특정 문자열 찾기 (0) | 2020.04.12 |
파이썬 파일과 이미지 다루기(쓰기, 읽기, 추가하기) (0) | 2020.04.09 |
파이썬의 정렬 알고리즘 sort(), sorted() (2) | 2020.03.25 |
zipfile 모듈로 압축하기 (0) | 2020.03.10 |