파이썬은 왜 느린가?
파이썬의 단점 : 느리다
파이썬의 단점을 찾아보면, 단순하게 '느리다'라고 표현한 자료가 많았다. 필연스럽게 파이썬이 왜 느린지 궁금했고,
작동과정을 알아보며 그 이유를 찾아보려 한다.
1. 싱글 스레드
파이썬은 싱글 스레드 언어다. 하나의 스레드에서 모든 자원을 사용하고, 나머지는 잠궈놓는다. 이 잠구는 기능을 GIL(Global interpreter lock)이라 한다.
GIL를 사용하는 이유로는 다음과 같다. 객체 참조시 파이썬은 referenece count를 증가시키며, 사용하지 않으면 감소시키고, 0이 되면 사라지게 된다. 이를 여러 스레드에서 동시에 접근하게 되면 부정확한 값이 입력될 수 있어 GIL을 통해 해당 문제를 해결하게 되었다.
1-1. 멀티프로세스 vs 멀티스레드
프로세스는 운영체제의 작업 단위이며, 프로그램이 메모리에 올라와있는 동적인 상태를 말한다.
스레드는 cpu 입장에서의 작업 단위이다. 하나의 응용프로그램 속 스레드는 하나의 작업을 처리한다.
1-2. 멀티프로세스
사실 파이썬도 모듈을 사용하면 멀티 스레드와 멀티 프로세스를 구현할 수 있다. 특히 I/O bound(입출력이 잦은 프로그램)작업의 경우 수행시 GIL의 영향을 받지 않기 때문에 멀티 스레드를 사용하면 빠른 작업이 가능하다. 그외 cpu bound 작업에 경우에는, GIL의 영향권에 있기에 싱글스레드와 멀티스레드의 시간차이가 거의 없다.
멀티 프로세스를 사용하려는 프로그램의 경우 속도의 증가를 기대해 볼 수는 있겠으나, 예상치 못한 곳에서 오버헤드 및 메모리 사용량이 증가할 수 있기 때문에 주의가 필요하다.
2. 인터프리터 언어
줄 단위로 해독을 하는 인터프리터 언어상, 컴파일 언어보다 오래 걸릴 수 밖에 없다. 다만 가독성이 좋아 많은 언어에서 사용하고 있는 추세이다.
4.참고자료
https://greatlaboratory.dev/cs/cs-05/
스레드의 동작 (feat. Python)
프로세스/스레드, GIL, DeadLock
greatlaboratory.dev
https://wangin9.tistory.com/entry/pythonthreadGIL
python에서의 thread 동시성 문제 (feat. GIL, Global Interpreter Lock )
1. 파이썬이란, 파이썬은 1991년에 발표된 고급 프로그래밍 언어로, 플랫폼 독립적이며 인터프리터식, 객체지향적, 동적 타이핑 대화형 언어이다. 다시 말하면, 다양한 플랫폼에서 사용할 수 있고
wangin9.tistory.com
파이썬 GIL이란 무엇인가?
최근 파이썬으로 서비스 개발을 하며 퍼포먼스에 대한 여러가지 시행착오를 겪고, 성능 병목을 만드는 GIL에 대해 공부하게 되었다. 완전하진 않지만 나에게 필요한 부분 위주로 글을 정리해본
bloofer.net