language/Python

[Python] PyPy3 vs Python3

스파이디웹 2023. 1. 6. 11:30
728x90

 

이번 포스트에는 PyPy3와 Python3를 비교해보고 어떤 상황일 때 사용하면 좋은 지 확인해보겠습니다.

 

비교 전에 컴파일 언어와 인터프리터 언어의 특징을 확인하겠습니다.

컴파일 언어: 소스 코드를 기계어로 컴파일(Compile time) -> 실행파일 만듦 -> 실행(Run time)
인터프리터 언어: 코드를 한줄씩 읽어 가며 실행

Python3

1) 구현체

python의 시작은 C로 구현되었고, 그 구현체가 CPython인데, CPython은 인터프리터이면서 컴파일러

 

2) 동작 방식

python3에서는 우리가 작성하는 python코드를 bytecode로 컴파일하고 실행한다.

즉, python코드를 C언어로 바꾸는 것이 아니라, 컴파일 하여 bytecode로 바꾸고 그 다음 인터프리터(가장 머신)가 실행한다.


PyPy3

1) 구현체

PyPy3는 Python3를 실행 시 시간이 매우 오래 걸린다는 단점이 있어, 그것을 개선하고자 JIT컴파일 방식을 도입한 것

 

2) 동작 방식

PyPy3에서 사용하는 JIT(just in time) 컴파일이란 프로그램을 실행하기 전에 컴파일 하는 대신, 프로그램을 실행하는 시점에서 필요한 부분들을 즉석으로 컴파일 하는 방식이고, 보통 인터프리터 언어의 성능 향상을 목적으로 도입하는 경우가 많다.

인터프리트 하면서 자주 쓰이는 코드를 캐싱하기 때문에 인터 프리터의 느린 실행속도를 개선할 수 있다.

JVM에서도 바이트 코드를 기계어로 번역할 때 JIT 컴파일러를 사용한다.

Cpython보다 약 7.5배 빠르다고 한다.


결론

정리하면, PyPy3에서는 실행 시, 자주 쓰이는 코드를 캐싱하는 기능이 있기 때문에,  메모리를 조금 더 사용하여 그것들을 저장하고 있어 실행속도를 개선할 수 있다.

  Python3 PyPy3
메모리 메모리를 비교적 적게 씀 python3보다 메모리를 많이 씀
속도 간단한 코드에서 우세 복잡한 코드에서 우세

-> 코드 상황에 맞추어 두 구현체(PyPy3-JIT, Python3-CPython)를 적절하게 사용하는 것이 효율적

 

 

참조:

https://ralp0217.tistory.com/entry/Python3-%EC%99%80-PyPy3-%EC%B0%A8%EC%9D%B4

https://stackoverflow.com/questions/59050724/whats-the-differences-python3-and-pypy3

728x90