CPython ๊ฐ์ ๋จธ์ ์ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์ดํด๋ณด๊ณ , ์คํ ๋ชจ๋ธ์ ์ดํดํ๋ฉฐ, Python ์ฝ๋๊ฐ ์ฒ๋ฆฌ๋๊ณ ์คํ๋๋ ๋ฐฉ์์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป์ผ์ญ์์ค.
Python ๊ฐ์ ๋จธ์ ๋ด๋ถ: CPython ์คํ ๋ชจ๋ธ ์ฌ์ธต ๋ถ์
๋ฐ์ด๋ ๊ฐ๋ ์ฑ๊ณผ ๋ค์ฌ๋ค๋ฅํจ์ผ๋ก ์ ๋ช ํ Python์ Python ์ธ์ด์ ์ฐธ์กฐ ๊ตฌํ์ฒด์ธ CPython ์ธํฐํ๋ฆฌํฐ ๋๋ถ์ ์คํ๋ฉ๋๋ค. CPython ๊ฐ์ ๋จธ์ (VM) ๋ด๋ถ๋ฅผ ์ดํดํ๋ฉด Python ์ฝ๋๊ฐ ์ฒ๋ฆฌ, ์คํ ๋ฐ ์ต์ ํ๋๋ ๋ฐฉ์์ ๋ํ ๊ท์คํ ํต์ฐฐ๋ ฅ์ ์ป์ ์ ์์ต๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ CPython ์คํ ๋ชจ๋ธ์ ๋ํ ํฌ๊ด์ ์ธ ํ์์ ์ ๊ณตํ์ฌ ์ํคํ ์ฒ, ๋ฐ์ดํธ์ฝ๋ ์คํ ๋ฐ ์ฃผ์ ๊ตฌ์ฑ ์์๋ฅผ ์์ธํ ์ดํด๋ด ๋๋ค.
CPython ์ํคํ ์ฒ ์ดํด
CPython์ ์ํคํ ์ฒ๋ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ํฌ๊ฒ ๋๋ ์ ์์ต๋๋ค.
- ํ์ฑ: Python ์์ค ์ฝ๋๊ฐ ์ฒ์ ํ์ฑ๋์ด ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ฅผ ๋ง๋ญ๋๋ค.
- ์ปดํ์ผ: AST๋ CPython VM์ด ์ดํดํ๋ ์ ์์ค ๋ช ๋ น์ด ์ธํธ์ธ Python ๋ฐ์ดํธ์ฝ๋๋ก ์ปดํ์ผ๋ฉ๋๋ค.
- ํด์: CPython VM์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํํฉ๋๋ค.
์ด๋ฌํ ๋จ๊ณ๋ Python ์ฝ๋๊ฐ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์์ค์์ ๊ธฐ๊ณ ์คํ ๊ฐ๋ฅํ ๋ช ๋ น์ด๋ก ๋ณํ๋๋ ๋ฐฉ์์ ์ดํดํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
ํ์
ํ์๋ Python ์์ค ์ฝ๋๋ฅผ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ก ๋ณํํ๋ ์ญํ ์ ํฉ๋๋ค. AST๋ ์ฝ๋ ๊ตฌ์กฐ์ ํธ๋ฆฌ์ ๊ฐ์ ํํ์ผ๋ก, ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ถ๋ถ ๊ฐ์ ๊ด๊ณ๋ฅผ ์บก์ฒํฉ๋๋ค. ์ด ๋จ๊ณ์๋ ์ดํ ๋ถ์(์ ๋ ฅ ํ ํฐํ) ๋ฐ ๊ตฌ๋ฌธ ๋ถ์(๋ฌธ๋ฒ ๊ท์น์ ๋ฐ๋ผ ํธ๋ฆฌ ๊ตฌ์ถ)์ด ํฌํจ๋ฉ๋๋ค. ํ์๋ ์ฝ๋๊ฐ Python์ ๊ตฌ๋ฌธ ๊ท์น์ ์ค์ํ๋์ง ํ์ธํฉ๋๋ค. ๊ตฌ๋ฌธ ์ค๋ฅ๋ ์ด ๋จ๊ณ์์ ๋ฐ๊ฒฌ๋ฉ๋๋ค.
์:
๊ฐ๋จํ Python ์ฝ๋ x = 1 + 2๋ฅผ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.
ํ์๋ ์ด๋ฅผ ํ ๋น ์ฐ์ฐ์ ๋ํ๋ด๋ AST๋ก ๋ณํํ๊ณ 'x'๋ฅผ ๋์์ผ๋ก, '1 + 2' ์์ ํ ๋นํ ๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค.
์ปดํ์ผ๋ฌ
์ปดํ์ผ๋ฌ๋ ํ์๊ฐ ์์ฑํ AST๋ฅผ ๊ฐ์ ธ์ Python ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํํฉ๋๋ค. ๋ฐ์ดํธ์ฝ๋๋ CPython VM์ด ์คํํ ์ ์๋ ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ๋ช ๋ น์ด ์ธํธ์ ๋๋ค. ์ด๋ ์๋ ์์ค ์ฝ๋์ ํ์ ์์ค ํํ์ด๋ฉฐ VM์ ์ํ ์คํ์ ์ต์ ํ๋์ด ์์ต๋๋ค. ์ด ์ปดํ์ผ ํ๋ก์ธ์ค๋ ์ฝ๋๋ฅผ ์ด๋ ์ ๋ ์ต์ ํํ์ง๋ง ์ฃผ์ ๋ชฉํ๋ ๊ณ ๊ธ AST๋ฅผ ๋ณด๋ค ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ํํ๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค.
์:
x = 1 + 2 ์์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๋ LOAD_CONST 1, LOAD_CONST 2, BINARY_ADD ๋ฐ STORE_NAME x์ ๊ฐ์ ๋ฐ์ดํธ์ฝ๋ ๋ช
๋ น์ด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
Python ๋ฐ์ดํธ์ฝ๋: VM์ ์ธ์ด
Python ๋ฐ์ดํธ์ฝ๋๋ CPython VM์ด ์ดํดํ๊ณ ์คํํ๋ ์ ์์ค ๋ช ๋ น์ด ์ธํธ์ ๋๋ค. ์ด๋ ์์ค ์ฝ๋์ ๊ธฐ๊ณ ์ฝ๋ ์ฌ์ด์ ์ค๊ฐ ํํ์ ๋๋ค. ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ดํดํ๋ ๊ฒ์ Python์ ์คํ ๋ชจ๋ธ์ ์ดํดํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ํต์ฌ์ ๋๋ค.
๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด
๋ฐ์ดํธ์ฝ๋๋ ํน์ ์ฐ์ฐ์ ๋ํ๋ด๋ ๊ฐ opcode๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ opcode๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
LOAD_CONST: ์คํ์ ์์ ๊ฐ์ ๋ก๋ํฉ๋๋ค.LOAD_NAME: ์คํ์ ๋ณ์์ ๊ฐ์ ๋ก๋ํฉ๋๋ค.STORE_NAME: ์คํ์ ๊ฐ์ ๋ณ์์ ์ ์ฅํฉ๋๋ค.BINARY_ADD: ์คํ์ ๋งจ ์์ ์๋ ๋ ์์๋ฅผ ๋ํฉ๋๋ค.BINARY_MULTIPLY: ์คํ์ ๋งจ ์์ ์๋ ๋ ์์๋ฅผ ๊ณฑํฉ๋๋ค.CALL_FUNCTION: ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.RETURN_VALUE: ํจ์์์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ ์ฒด opcode ๋ชฉ๋ก์ Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ opcode ๋ชจ๋์์ ์ฐพ์ ์ ์์ต๋๋ค. ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ถ์ํ๋ฉด ์ฑ๋ฅ ๋ณ๋ชฉ ํ์๊ณผ ์ต์ ํ ์์ญ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ฐ์ดํธ์ฝ๋ ๊ฒ์ฌ
Python์ dis ๋ชจ๋์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋์ค์ด์
๋ธํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ฌ ์ฃผ์ด์ง ํจ์ ๋๋ ์ฝ๋ ์ค๋ํซ์ ๋ํด ์์ฑ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ฒ์ฌํ ์ ์์ต๋๋ค.
์:
```python import dis def add(a, b): return a + b dis.dis(add) ```๊ทธ๋ฌ๋ฉด add ํจ์์ ๋ํ ๋ฐ์ดํธ์ฝ๋๊ฐ ์ถ๋ ฅ๋์ด ์ธ์๋ฅผ ๋ก๋ํ๊ณ , ๋ํ๊ธฐ๋ฅผ ์ํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ฐ ๊ด๋ จ๋ ๋ช
๋ น์ด๊ฐ ํ์๋ฉ๋๋ค.
CPython ๊ฐ์ ๋จธ์ : ์ค์ ์คํ
CPython VM์ ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์ญํ ์ ํ๋ ์คํ ๊ธฐ๋ฐ ๊ฐ์ ๋จธ์ ์ ๋๋ค. ํธ์ถ ์คํ, ํ๋ ์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ ์คํ ํ๊ฒฝ์ ๊ด๋ฆฌํฉ๋๋ค.
์คํ
์คํ์ CPython VM์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ์ฐ์ฐ, ํจ์ ์ธ์ ๋ฐ ๋ฐํ ๊ฐ์ ๋ํ ํผ์ฐ์ฐ์๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น์ด๋ ์คํ์ ์กฐ์ํ์ฌ ๊ณ์ฐ์ ์ํํ๊ณ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ฆฌํฉ๋๋ค.
BINARY_ADD์ ๊ฐ์ ๋ช
๋ น์ด๊ฐ ์คํ๋๋ฉด ์คํ์ ๋งจ ์์ ์๋ ๋ ์์๋ฅผ ํํ๊ณ ๋ํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์คํ์ ํธ์ํฉ๋๋ค.
ํ๋ ์
ํ๋ ์์ ํจ์ ํธ์ถ์ ์คํ ์ปจํ ์คํธ๋ฅผ ๋ํ๋ ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
- ํจ์์ ๋ฐ์ดํธ์ฝ๋.
- ๋ก์ปฌ ๋ณ์.
- ์คํ.
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ(์คํ๋ ๋ค์ ๋ช ๋ น์ด์ ์ธ๋ฑ์ค).
ํจ์๊ฐ ํธ์ถ๋๋ฉด ์ ํ๋ ์์ด ์์ฑ๋์ด ํธ์ถ ์คํ์ ํธ์๋ฉ๋๋ค. ํจ์๊ฐ ๋ฐํ๋๋ฉด ํด๋น ํ๋ ์์ด ์คํ์์ ํ๋๊ณ ์คํ์ ํธ์ถ ํจ์์ ํ๋ ์์์ ์ฌ๊ฐ๋ฉ๋๋ค. ์ด ๋ฉ์ปค๋์ฆ์ ํจ์ ํธ์ถ ๋ฐ ๋ฐํ์ ์ง์ํ๊ณ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ถ๋ถ ๊ฐ์ ์คํ ํ๋ฆ์ ๊ด๋ฆฌํฉ๋๋ค.
ํธ์ถ ์คํ
ํธ์ถ ์คํ์ ํ์ฌ ์คํ ์ง์ ์ผ๋ก ์ด์ด์ง๋ ํจ์ ํธ์ถ ์ํ์ค๋ฅผ ๋ํ๋ด๋ ํ๋ ์ ์คํ์ ๋๋ค. ์ด๋ฅผ ํตํด CPython VM์ ํ์ฑ ํจ์ ํธ์ถ์ ์ถ์ ํ๊ณ ํจ์๊ฐ ์๋ฃ๋๋ฉด ์ฌ๋ฐ๋ฅธ ์์น๋ก ๋์๊ฐ ์ ์์ต๋๋ค.
์: ํจ์ A๊ฐ ํจ์ B๋ฅผ ํธ์ถํ๊ณ ํจ์ B๊ฐ ํจ์ C๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ ํธ์ถ ์คํ์๋ A, B ๋ฐ C์ ๋ํ ํ๋ ์์ด ํฌํจ๋๊ณ C๊ฐ ๋งจ ์์ ์์ต๋๋ค. C๊ฐ ๋ฐํ๋๋ฉด ํด๋น ํ๋ ์์ด ํ๋๊ณ ์คํ์ B๋ก ๋์๊ฐ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ๊ฐ๋น์ง ์์ง
CPython์ ์ฃผ๋ก ๊ฐ๋น์ง ์์ง์ ํตํด ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ ๋นํ๊ณ ํด์ ํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ค๋ฅ์ ์ํ์ด ์ค์ด๋ญ๋๋ค.
์ฐธ์กฐ ํ์
CPython์ ์ฃผ์ ๊ฐ๋น์ง ์์ง ๋ฉ์ปค๋์ฆ์ ์ฐธ์กฐ ํ์์ ๋๋ค. ๊ฐ ๊ฐ์ฒด๋ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ ํ์๋ฅผ ์ ์งํฉ๋๋ค. ์ฐธ์กฐ ํ์๊ฐ 0์ผ๋ก ๋จ์ด์ง๋ฉด ๊ฐ์ฒด์ ๋ ์ด์ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ ์๋์ผ๋ก ํ ๋น ํด์ ๋ฉ๋๋ค.
์:
```python a = [1, 2, 3] b = a # a์ b๋ ๋ชจ๋ ๋์ผํ ๋ชฉ๋ก ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค. ์ฐธ์กฐ ํ์๋ 2์ ๋๋ค. del a # ๋ชฉ๋ก ๊ฐ์ฒด์ ์ฐธ์กฐ ํ์๋ ์ด์ 1์ ๋๋ค. del b # ๋ชฉ๋ก ๊ฐ์ฒด์ ์ฐธ์กฐ ํ์๋ ์ด์ 0์ ๋๋ค. ๊ฐ์ฒด๊ฐ ํ ๋น ํด์ ๋ฉ๋๋ค. ```์ํ ๊ฐ์ง
์ฐธ์กฐ ํ์๋ง์ผ๋ก๋ ์ํ ์ฐธ์กฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ํ ์ฐธ์กฐ๋ ๋ ์ด์์ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ์ฌ ์ฐธ์กฐ ํ์๊ฐ 0์ ๋๋ฌํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. CPython์ ์ํ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ํ์ ์๋ณํ๊ณ ๋์ด ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ ์ ์๋๋ก ํฉ๋๋ค.
์:
```python a = {} b = {} a['b'] = b b['a'] = a # a์ b๋ ์ด์ ์ํ ์ฐธ์กฐ๋ฅผ ๊ฐ์ต๋๋ค. ์ฐธ์กฐ ํ์๋ง์ผ๋ก๋ ํ์ํ ์ ์์ต๋๋ค. # ์ํ ๊ฐ์ง๊ธฐ๊ฐ ์ด ์ํ์ ์๋ณํ๊ณ ๋์ด ๊ฐ๋น์ง ์์ง์ ํ์ฉํฉ๋๋ค. ```Global Interpreter Lock(GIL)
Global Interpreter Lock(GIL)์ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง Python ์ธํฐํ๋ฆฌํฐ์ ๋ํ ์ ์ด๋ฅผ ์ ์งํ ์ ์๋๋ก ํ๋ ๋ฎคํ ์ค์ ๋๋ค. ์ฆ, ๋ค์ค ์ค๋ ๋ Python ํ๋ก๊ทธ๋จ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ CPU ์ฝ์ด ์์ ๊ด๊ณ์์ด ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง Python ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. GIL์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ๊ฒฝํฉ ์ํ๋ฅผ ๋ฐฉ์งํ์ง๋ง CPU ๋ฐ์ด๋ ๋ค์ค ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ ํํ ์ ์์ต๋๋ค.
GIL์ ์ํฅ
GIL์ ์ฃผ๋ก CPU ๋ฐ์ด๋ ๋ค์ค ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋๋ถ๋ถ์ ์๊ฐ์ ์ธ๋ถ ์ฐ์ฐ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ ์๋นํ๋ I/O ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๋ ๋๊ฐ I/O ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ GIL์ ํด์ ํ ์ ์์ผ๋ฏ๋ก GIL์ ์ํฅ์ ๋ ๋ฐ์ต๋๋ค.
GIL์ ์ฐํํ๊ธฐ ์ํ ์ ๋ต
GIL์ ์ํฅ์ ์ํํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ง ์ ๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ค์ค ์ฒ๋ฆฌ:
multiprocessing๋ชจ๋์ ์ฌ์ฉํ์ฌ ๊ฐ๊ฐ ์์ฒด Python ์ธํฐํ๋ฆฌํฐ์ GIL์ด ์๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ CPU ์ฝ์ด๋ฅผ ํ์ฉํ ์ ์์ง๋ง ํ๋ก์ธ์ค ๊ฐ ํต์ ์ค๋ฒํค๋๋ ๋ฐ์ํฉ๋๋ค. - ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ:
asyncio์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ๋ ์์ด ๋์์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํด ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ์ผ ์ค๋ ๋ ๋ด์์ ์ฌ๋ฌ ์์ ์ ๋์์ ์คํํ๊ณ I/O ์์ ์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์์ ์ ์ ํํ ์ ์์ต๋๋ค. - C ํ์ฅ: C ๋๋ ๊ธฐํ ์ธ์ด๋ก ์ฑ๋ฅ์ด ์ค์ํ ์ฝ๋๋ฅผ ์์ฑํ๊ณ C ํ์ฅ์ ์ฌ์ฉํ์ฌ Python๊ณผ ์ธํฐํ์ด์คํฉ๋๋ค. C ํ์ฅ์ GIL์ ํด์ ํ์ฌ ๋ค๋ฅธ ์ค๋ ๋๊ฐ Python ์ฝ๋๋ฅผ ๋์์ ์คํํ ์ ์๋๋ก ํฉ๋๋ค.
์ต์ ํ ๊ธฐ์
CPython ์คํ ๋ชจ๋ธ์ ์ดํดํ๋ฉด ์ต์ ํ ๋ ธ๋ ฅ์ ์๋ดํ ์ ์์ต๋๋ค. ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๊ธฐ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ๋กํ์ผ๋ง
ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. cProfile ๋ชจ๋์ ํจ์ ํธ์ถ ํ์ ๋ฐ ์คํ ์๊ฐ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฏ๋ก ๊ฐ์ฅ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ์ฝ๋ ๋ถ๋ถ์ ์ต์ ํ ๋
ธ๋ ฅ์ ์ง์คํ ์ ์์ต๋๋ค.
๋ฐ์ดํธ์ฝ๋ ์ต์ ํ
๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ถ์ํ๋ฉด ์ต์ ํ ๊ธฐํ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ถํ์ํ ๋ณ์ ์กฐํ๋ฅผ ํผํ๊ณ , ๋ด์ฅ ํจ์๋ฅผ ์ฌ์ฉํ๊ณ , ํจ์ ํธ์ถ์ ์ต์ํํ๋ฉด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ
์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ฉด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฉค๋ฒ์ญ ํ ์คํธ์๋ ์งํฉ์, ์กฐํ์๋ ์ฌ์ ์, ์ ๋ ฌ๋ ์ปฌ๋ ์ ์๋ ๋ชฉ๋ก์ ์ฌ์ฉํ๋ฉด ํจ์จ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
Just-In-Time(JIT) ์ปดํ์ผ
CPython ์์ฒด๋ JIT ์ปดํ์ผ๋ฌ๊ฐ ์๋์ง๋ง PyPy์ ๊ฐ์ ํ๋ก์ ํธ๋ JIT ์ปดํ์ผ์ ์ฌ์ฉํ์ฌ ์์ฃผ ์คํ๋๋ ์ฝ๋๋ฅผ ๊ธฐ๊ณ ์ฝ๋๋ก ๋์ ์ผ๋ก ์ปดํ์ผํ์ฌ ์๋นํ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ต๋๋ค. ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์๋ PyPy ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
CPython๊ณผ ๋ค๋ฅธ Python ๊ตฌํ ๋น๊ต
CPython์ ์ฐธ์กฐ ๊ตฌํ์ด์ง๋ง ๋ค๋ฅธ Python ๊ตฌํ์ด ์กด์ฌํ๋ฉฐ ๊ฐ๊ฐ ๊ณ ์ ํ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
- PyPy: JIT ์ปดํ์ผ๋ฌ๊ฐ ์๋ ๋น ๋ฅด๊ณ ํธํ ๊ฐ๋ฅํ Python ๋์ฒด ๊ตฌํ์ ๋๋ค. ํนํ CPU ๋ฐ์ด๋ ์์ ์ ๊ฒฝ์ฐ CPython์ ๋นํด ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- Jython: Java Virtual Machine(JVM)์์ ์คํ๋๋ Python ๊ตฌํ์ ๋๋ค. Python ์ฝ๋๋ฅผ Java ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํตํฉํ ์ ์์ต๋๋ค.
- IronPython: .NET Common Language Runtime(CLR)์์ ์คํ๋๋ Python ๊ตฌํ์ ๋๋ค. Python ์ฝ๋๋ฅผ .NET ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํตํฉํ ์ ์์ต๋๋ค.
๊ตฌํ ์ ํ์ ์ฑ๋ฅ, ๋ค๋ฅธ ๊ธฐ์ ๊ณผ์ ํตํฉ, ๊ธฐ์กด ์ฝ๋์์ ํธํ์ฑ๊ณผ ๊ฐ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ฒฐ๋ก
CPython ๊ฐ์ ๋จธ์ ๋ด๋ถ๋ฅผ ์ดํดํ๋ฉด Python ์ฝ๋๊ฐ ์คํ๋๊ณ ์ต์ ํ๋๋ ๋ฐฉ์์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ํคํ ์ฒ, ๋ฐ์ดํธ์ฝ๋ ์คํ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ GIL์ ์์ธํ ์ดํด๋ด์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋ณด๋ค ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ Python ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. CPython์๋ ์ ํ ์ฌํญ์ด ์์ง๋ง Python ์ํ๊ณ์ ๊ธฐ๋ฐ์ผ๋ก ๋จ์ ์์ผ๋ฉฐ ํด๋น ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํ ํ์คํ ์ดํด๋ ๋ชจ๋ ์ง์งํ Python ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. PyPy์ ๊ฐ์ ๋์ฒด ๊ตฌํ์ ํ์ํ๋ฉด ํน์ ์๋๋ฆฌ์ค์์ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํฌ ์ ์์ต๋๋ค. Python์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์คํ ๋ชจ๋ธ์ ์ดํดํ๋ ๊ฒ์ ์ ์ธ๊ณ ๊ฐ๋ฐ์์๊ฒ ์ค์ํ ๊ธฐ์ ๋ก ๋จ์ ๊ฒ์ ๋๋ค.