본문 바로가기
Programming/Python

Python이 느린 이유?

by 데이터현 2022. 4. 2.

Python이 느린 이유. 지금까지 공부했을 때는 그냥 인터프리터 언어라서~ GIL 때문에~ 이러면서 적당히 넘어갔었는데,

찾아보며 하나하나 공부하다 보니 심오한(?) 내용들이 많았다

일단 내가 이해한 Python이 느린 이유를 간단하게 적고 조금씩 자세하게 추가 해 나가도록 해야겠다.

 

Python은 인터프리터 언어인가요?

나의 생각은 반만 인터프리터

사실 인터프리터, 컴파일러 언어라는게 상당히 애매모호한 개념이다.

 

1. 사실 Python이 느린 게 아니라 Python의 표준 구현체인 Cpython이 느린 것.

- Cpython 과 pypy의 차이 + 구현체가 어떻게 동작하길래?

2. 인터프리터, 컴파일러의 차이 (컴파일이 의미하는 게 뭐길래?)

- 사실 Python도 어떻게 보면 컴파일 언어고 어떻게 보면 인터프리터 언어다 (사실상 JAVA랑 똑같음!!)

3. 그러면 표준 구현(Cpython)은 왜 C++ 보다 느릴까?

  • 가장 확실한건 C는 미리 컴파일되어 하드웨어에서 바로 실행됨
  • python은 pyc파일인 바이트코드로 한번 컴파일되고, 하드웨어에서 차례대로 실행되는 인터프리터에 의해 실행되는 바이트 코드-> 인터프리터는 많은 오버헤드를 추가 (왜?)
  • Python은 동적 언어이기 때문 -> 메모리 할당 X(애초에 리스트가 동적 배열이다), 변수 타입 지정 X, 상당히 자유로움 -> 이런 자유도는 당연히 대가를 치러야 함. 그게 속도
  • 그럼 이런 동적 언어가 왜 느릴까?
    • 1. 파이썬 인터프리터는 실행시킬때 해당 변수가 다음 명령어에서 어떤 종류의 값을 가지는지 알 길이 없음
    • 2. 언제 새로운 메모리를 할당할지 미리 알지 못하기 때문에 실제로 많이 최적화 하기가 어려움
  • Python(Cpython은) GIL 때문에 !
    • 메모리 객체에 대한 뮤텍스가 있기 때문에 모든 내부 엔터티가 이를 사용해야 함
    • 이는 주요 병목 현상

 

애초에 설계부터 구린데(비효율적인데) + 근데 왜 Python을 씀?

1. python 라이브러리들은 내부적으로 구현이 C, C++로 되어있어서 또 나름 속도도 나쁘지 않음

2. 배우기 쉽고, 사용하기 용이하고, 표현력이 뛰어남

3. 실제로 크게 차이 안남 -> 왜냐하면 실제로 계산하고 연산하는 작업보다 많은 현대 응용프로그램은 I/O 작업에서 많은 시간을 소모(외부 데이터에서 읽고 쓰고)

 

차차 정리해야겠다.

 

'Programming > Python' 카테고리의 다른 글

[Python] 피보나치 구현 정리  (0) 2022.04.10
[Python] 순열 조합 구현  (0) 2022.04.08
python 다중 할당 동작방식  (0) 2022.03.23
python typing optional  (0) 2022.03.23
python의 LEGB 규칙  (0) 2022.01.11

댓글