그리고 GIL,,, th레드,,,
(이어서,,,)
파이썬에서 뜨레드 여러 개를 이용하는 프로그램을 만들고, 동시에 일하는 것을 기대했지만,
실제로는 CPU를 점유 할 수 있는 뜨레드는 한 개! 실행 속도는 더 느려진다!
Global Interpreter Lock
언어에서 자원을 보호하기 위해 (Lock) 정책을 사용. 파이썬에서는 하나의 프로세스 안에 모든 자원의 락(Lock)을 글로벌(Global)하게 관리함으로써 한 번에 하나의 쓰레드만 자원을 컨트롤 하여 동작 하도록 한다
자원의 배분을 한 thread에게만 할당하고, 그 thread가 끝날 때 까지 Lock을 걸어 다른 thread가 접근하지 못하도록!
→ Cpython
은 GIL을 사용해서 하나의 thread만 실행 상태에 있게 한다
→ 멀티 뜨레드 코드에서는 성능 병목 현상이 발생할 수 있다
GIL은 멀티뜨레드 프로그램에서 성능이 떨어지게 하지만, GIL을 이용하여 멀티뜨레드를 구현하는 것이 병렬의 멀티뜨레드를 구현하는 것보다 쉽다
프로그램이 I/O를 많이 쓰면 대부분 I/O bound이기 때문에 파이썬의 뜨레드를 사용하는 것이 좋은 경우도 있다
앞선 1편에서의 코드(0부터 억-1까지 더하기 코드)에서
result라는 자원을 공유하는 두 개의 뜨레드를 동시에 실행시키지만,
결국 GIL 때문에 한 번에 하나의 뜨레드만 계산하여 실행시간이 비슷한 것