memostack
article thumbnail
블로그를 이전하였습니다. 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

왜 GIL을 사용할까?

thread safe 와 관련이 있는데, 병렬 프로그램은 공유 자원에 동시에 접근하다보니 경쟁 상태(rade condition)에 빠질 수 있다.

파이썬에서는 thread safe 를 위해 인터프리터를 잠그는 방식을 택했다.

결론

솔직히 자세히 살펴보기전에는 파이썬의 스레드는 글로벌 락에 의해 좋지 않는 성질을 가지기 때문에, 멀티 프로세싱 방식을 쓰는 것이 좋은 줄 알았다.

하지만, 상황에 따라 멀티 스레드를 사용해도 괜찮다는 것을 알 수 있었다.

Reference

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!