ํ์ด์ฌ 3.13 ์ฑ๋ฅ ํฅ์ ์์ ์ ๋ณต: Free-Threading
ํ์ด์ฌ 3.13 ์ฑ๋ฅ ํฅ์ ์์ ์ ๋ณต: Free-Threading ๊ด๋ จ
๋ณธ๋ฌธ์ ์์ฆIT์ ๋ฒ์ญ๊ฐ David๊ฐ ํจ๊ป ์์ ํ์คํ (Arthur Pastel)์ ๊ธ <State of Python 3.13 Performance: Free-Threading>์ ๋ฒ์ญํ ๊ธ์ ๋๋ค. ํ์๋ ํ๋ฆฌ์์ ํ๋ํ๋ Python ๊ฐ๋ฐ์์ด์, ์คํ์์ค ์ ํธ๊ฐ๋ก MongoDB๋ฅผ ์ํ ODMantic์ ๊ฐ๋ฐํ์ต๋๋ค. ํ์ฌ๋ CI ํ์ดํ๋ผ์ธ์์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๋ ์๋ฃจ์ โCodSpeedโ์ ์ฐฝ์ ์๋ก ํ๋ํ๊ณ ์์ต๋๋ค. ์ด ๊ธ์์๋ ํ์ด์ฌ 3.13์์์ ์ฃผ์ ์ฑ๋ฅ ๋ณํ์ โFree-threadingโ ๊ธฐ๋ฅ์ ์๊ฐํฉ๋๋ค.
์ง๋ 10์์ ์ถ์๋ ํ์ด์ฌ 3.13์ ์ต๊ทผ ๋ฆด๋ฆฌ์ค ์ค์์๋ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ฅ ํฐ ์ค์ ์ ๋ ๋ฒ์ ์ ๋๋ค. ๋ฆด๋ฆฌ์ค ๋ ธํธ๋ฅผ ์ดํด๋ณด๋ฉด ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ๋ค์ด ๋์ ๋๋๋ค.
- ํ์ด์ฌ์ด ์ด์ ์ ์ญ ์ธํฐํ๋ฆฌํฐ ์ ๊ธ(GIL[1])์ ๋นํ์ฑํํ free-threaded ๋ชจ๋๋ก ์คํ ๊ฐ๋ฅํฉ๋๋ค.
- ์์ ํ ์๋ก์ด just-in-time(JIT[2]) ์ปดํ์ผ๋ฌ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ํ์ด์ฌ์ด ์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก
mimalloc
[3] ํ ๋น์๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
malloc: ํ๋ก๊ทธ๋จ ์คํ ์ค์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ ๋น๋ฐ๋ C ์ธ์ด์ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจ์
์ด ๊ธ์์๋ free-threaded ๋ชจ๋๋ฅผ ์ค์ ์ ์ผ๋ก ์ดํด๋ณด๊ณ , ์ด๋ฌํ ๋ณํ๊ฐ ํ์ด์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ธก์ ํด ๋ณผ ์์ ์ ๋๋ค.
Free-threaded ํ์ด์ฌ ์๊ฐ
Free-threading์ ํ์ด์ฌ 3.13์์ ๋์ ๋ ์คํ์ ๊ธฐ๋ฅ์ผ๋ก, ํ์ด์ฌ์ด ์ ์ญ ์ธํฐํ๋ฆฌํฐ ์ ๊ธ(GIL) ์์ด ์คํ๋ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. GIL์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ํ์ด์ฌ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ๋ง๋ ์ํธ ๋ฐฐ์ (mutex) ์ฅ์น์ ๋๋ค. ์ด๋ฌํ ์ค๊ณ๋ ํ์ด์ฌ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ , C API ์ฌ์ฉ์ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ์์ง๋ง, ํ๋์ ๋ฉํฐ์ฝ์ด ํ๋ก์ธ์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๋ ๋ฐ ์์ด ๊ฐ์ฅ ํฐ ์ฅ์ ๋ฌผ ์ค ํ๋๋ก ์์ฉํด ์์ต๋๋ค.
๊ธฐ์กด์ ๋ฉํฐํ๋ก์ธ์ฑ ์ฐํ ๋ฐฉ์
์ ํต์ ์ผ๋ก๋ multiprocessing
๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์์ต๋๋ค. ์ด ๋ชจ๋์ ์ค๋ ๋ ๋์ ๋ณ๋์ ํ์ด์ฌ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ด ๋์์ ํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ์ ์ฝ ์ฌํญ๋ค์ด ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋: ๊ฐ ํ๋ก์ธ์ค๋ ์์ฒด ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ ์ธ์คํด์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์๋ก ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ง์ด ๋ค๋ฃจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ด๋ ๋น ๋ฅด๊ฒ ๋ณ๋ชฉ ํ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ํต์ ๋น์ฉ: ํ๋ก์ธ์ค๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๊ณต์ ํ ์ ์์ต๋๋ค. ํ๋ก์ธ์ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋๋ง๋ค ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ ๊ณผ์ ์ด ํ์ํ๋ฉฐ, ์ด๋ ์ถ๊ฐ์ ์ธ ์ค๋ฒํค๋์ ๋ณต์ก์ฑ์ ์ผ๊ธฐํฉ๋๋ค.
- ์์ ์๊ฐ: ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ํ์ ํ ๋๋ฆฝ๋๋ค. ๋ฐ๋ผ์ ์์ ์(worker)๋ฅผ ์์ฃผ ์์ฑํด์ผ ํ๋ ์์ ์๋ ์ค์ฉ์ ์ด์ง ์์ต๋๋ค.
์ค์ ํ์ฉ ์ฌ๋ก: PageRank ๊ตฌํ
์ด๋ฌํ ์ ์ฝ ์ฌํญ์ ์ค์ ๋ก ํ์ธํ๊ธฐ ์ํด PageRank ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. PageRank๋ ์ด๊ธฐ ๊ตฌ๊ธ์ ๊ฒ์ ์์ง์ ์ง์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ผ๋ก ์ธํด ์ด์์ ์ธ ์์๊ฐ ๋ฉ๋๋ค.
- ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ (ํ๋ ฌ ์ฐ์ฐ)์ ์ํํฉ๋๋ค.
- ๋๊ท๋ชจ ๋ฐ์ดํฐ์ (์น ๊ทธ๋ํ)์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ณ๋ ฌํ๋ฅผ ํตํด ์๋นํ ์ฑ๋ฅ ๊ฐ์ ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
ํ์ด์ฌ 3.12 ์ด์ ๋ฒ์ ์์ ๋จ์ํ ๋ฉํฐ์ค๋ ๋ ๊ตฌํ์ ์๋ํ ๊ฒฝ์ฐ, ํ๋ ฌ ์ฐ์ฐ ๊ณผ์ ์์ GIL๋ก ์ธํ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ํํธ ๋ฉํฐํ๋ก์ธ์ฑ ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค.
- ๊ฐ ํ๋ก์ธ์ค์ ๊ทธ๋ํ๋ฅผ ๋ณต์ฌํ๋ ๋ฐ ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋
- ํ๋ก์ธ์ค ๊ฐ ๋ถ๋ถ ๊ฒฐ๊ณผ๋ฅผ ์ ์กํ๋ ๋ฐ ๋๋ ๋น์ฉ
- ๊ณต์ ์ํ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ
๋ค์์ผ๋ก ๋ค์ํ ๋์์ฑ ๋ชจ๋ธ์ ํตํ ๊ตฌํ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์ํ ๋์์ฑ ๋ชจ๋ธ์ ํตํ ๊ตฌํ
๊ธฐ๋ณธ ๊ตฌํ (๋จ์ผ ์ค๋ ๋)
์ด ์๊ณ ๋ฆฌ์ฆ์์ ๊ณ์ฐ ๋น์ฉ์ด ๊ฐ์ฅ ๋ง์ด ๋๋ ๋ถ๋ถ์ ์์น ๋ ๋ ๊ณณ์
๋๋ค. ์ฒซ ๋ฒ์งธ๋ ์ง์
๋
ธ๋๋ค๋ก๋ถํฐ์ ์ ์ ๊ธฐ์ฌ๋ถ์ ๊ณ์ฐํ๋ ๋ถ๋ถ์ด๊ณ , ๋ ๋ฒ์งธ๋ ๋ํ ํฉํฐ๋ฅผ ์ ์ฉํ์ฌ ์๋ก์ด ์ ์๋ฅผ ์ต์ข
๊ฒฐ๊ณผ์ ๋ฐ์ํ๋ ๋ถ๋ถ์
๋๋ค. ์ด ์ค์์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ๋ณ๋ ฌํํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ๊ณผ์ ์ด๋ฉด์๋ ๊ตฌํํ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์
๋๋ค. ๋ฒ์๋ฅผ ๋ถํ ํ์ฌ ์ฌ๋ฌ ์ค๋ ๋๊ฐ new_scores
๋ฐฐ์ด์ ํจ์จ์ ์ผ๋ก ๊ณ์ฐํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ฉํฐ์ค๋ ๋ ๊ตฌํ
๋ฉํฐ์ค๋ ๋ ๊ตฌํ์์๋ ๋จผ์ ํ๋ ฌ์ ์ฌ๋ฌ ๊ฐ์ ์ฒญํฌ[4]๋ก ๋๋๋ ๊ฒ๋ถํฐ ์์ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ฐ ์ค๋ ๋๋ ํ๋ ฌ์ ์๋ก ๋ค๋ฅธ ์ฒญํฌ์ ๋ํด ์์ ์ ์ํํ๋ฉฐ, ์๋ก์ด ์ ์๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ์ ์ new_scores
๋ฐฐ์ด์ ๊ฐฑ์ ์ด ์ ๊ธ ๋ ์ํ์์ ์ด๋ฃจ์ด์ง๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ ๊ฒฝ์ ์ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฒ์
๋๋ค. ์ ๊ธ ์ํ๊ฐ ์ค๋ ์ ์ง๋๋ฉด ๋ณ๋ชฉ ํ์์ด ๋ ์ ์์ง๋ง, ์ค์ ๋ก๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ ๋ณ๋ ฌํํ๋ ๊ฒ๋ง์ผ๋ก๋ ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ป์ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๊ฐ ์ค๋ ๋์ ์ฒญํฌ๋ฅผ ํ ๋นํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค.
๋ฉํฐํ๋ก์ธ์ค ๊ตฌํ
๋ฉํฐํ๋ก์ธ์ค ๊ตฌํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉํฐ์ค๋ ๋ ๊ตฌํ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ์ฃผ์ ์ฐจ์ด์ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ํ๋ก์ธ์ค๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ๊ณต์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ ์์ปค๋ ๊ณต์
new_scores
๋ฐฐ์ด์ ๊ฐฑ์ ํ๋ ๋์local_scores
๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค. ๊ทธ ํ ๋ฉ์ธ ํ๋ก์ธ์ค์์ ๋ก์ปฌ ์ ์๋ค์ ์ทจํฉํฉ๋๋ค.
์ด ๋ฐฉ์์ ๋ฉํฐ์ค๋ ๋ ๋ฒ์ ๋ณด๋ค ๋น ๋ฅผ ์ ์์ง๋ง, ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ๋ฐ๋ฅธ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํฉ๋๋ค. ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ๊ฒฝ์ฐ ์ด ์ค๋ฒํค๋๊ฐ ์๋นํ ์ปค์ง ์ ์์ต๋๋ค.
ThreadPoolExecutor
๋์multiprocessing.Pool
์ ์ฌ์ฉํฉ๋๋ค. API๋ ๋งค์ฐ ๋น์ทํ์ง๋ง,multiprocessing.Pool
์ ์ค๋ ๋ ๋์ ํ๋ก์ธ์ค ํ์ ์์ฑํฉ๋๋ค.
์ฑ๋ฅ ์ธก์
์ค์ ์ฑ๋ฅ ๋ณํ๋ฅผ ์ธก์ ํ๊ธฐ ์ํด ์ฑ๋ฅ ํ ์คํธ๋ฅผ ๊ตฌ์ถํด ๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ ํ ์คํธ์ฉ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฒ๋ถํฐ ์์ํฉ๋๋ค.
ํ ์คํธ ๋ฐ์ดํฐ ์์ฑ
์ฌ๊ธฐ์๋ ์คํ๋ง๋ค ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๊ณ ์ ๋ ์๋๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์๋ก ๋ค๋ฅธ ๊ตฌํ ๋ฐฉ์์ ์ฑ๋ฅ์ ๋น๊ตํ ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ํ์ด์ง ๊ฐ์ ๊ฐ์ง ์ฐ๊ฒฐ์ ์์ฑํ์ฌ ํ์ค์ ์ธ ๊ทธ๋ํ๋ฅผ ๋ง๋ค๊ณ ์์ง๋ง, ํ๋ ฌ์ ํฌ๊ธฐ๊ฐ ๋์ผํ๋ค๋ฉด ๋น ํ๋ ฌ์ ์ฌ์ฉํ๋๋ผ๋ ์ํ์ ์ฐ์ฐ์ ์ ํํ ๋์ผํ ๊ฒ์ ๋๋ค.
๋ฒค์น๋งํฌ ์ผ์ด์ค ์ ์
๋ค์์ผ๋ก, pytest-codspeed
๋ผ๋ pytest
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ๋ค์ํ ๋งค๊ฐ๋ณ์์ ์ฌ๋ฌ ํ์ด์ฌ ๋ฒ์ /๋น๋์ ๋ํ ์ฑ๋ฅ์ ์ธก์ ํด ๋ณด๊ฒ ์ต๋๋ค.
์ฌ๊ธฐ์๋ 3๊ฐ์ง ๊ตฌํ ๋ฐฉ์์ 3๊ฐ์ง ๋ค๋ฅธ ๊ทธ๋ํ ํฌ๊ธฐ๋ก ํ
์คํธํฉ๋๋ค. pytest-codspeed
๊ฐ ์ ๊ณตํ๋ benchmark
๋ฅผ ์ฌ์ฉํ์ฌ, ์ฃผ์ด์ง ์ธ์๋ก pagerank
ํจ์์ ์คํ ์๊ฐ์ ์ธก์ ํฉ๋๋ค.
๊นํ๋ธ ์ก์ ์ํฌํ๋ก์ฐ ์ค์
CodSpeed์ ์ธํ๋ผ์์ ๋ค์ํ ํ์ด์ฌ ๋น๋์ ์ฑ๋ฅ์ ์ธก์ ํ๊ธฐ ์ํ ๊นํ๋ธ ์ก์ ์ํฌํ๋ก์ฐ๋ฅผ ์์ฑํฉ๋๋ค.
์ด ์ค์ ์์๋ ํ์ด์ฌ 3.12, 3.13, ๊ทธ๋ฆฌ๊ณ free threading ์ง์์ด ํฌํจ๋ 3.13์ ๋ํด GIL์ ํ์ฑํํ ๊ฒฝ์ฐ์ ๋นํ์ฑํํ ๊ฒฝ์ฐ ๋ชจ๋์์ ๋ฒค์น๋งํฌ๋ฅผ ์คํํฉ๋๋ค. ์ด๋ฅผ ํตํด GIL์ด ํ์ฑํ๋ ์ํ์์๋ free-threading์ ์ํฅ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ์ธก์ ๊ฒฐ๊ณผ๋?
๋ถ์ ๊ฒฐ๊ณผ
- ์๋ก์ด ๋น๋ ์ต์
์ ํ์ฑํํ์ง ์์ ์ํ์์๋ 3.12์ 3.13 ๋ฒ์ ์ด ๋งค์ฐ ์ ์ฌํ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ๋ํ
multiprocessing
๊ตฌํ์ ํ๊ณ๋ ๋ช ํํ ๋๋ฌ๋ฌ๋๋ฐ, ํ๋ก์ธ์ค ๊ฐ ํต์ ์ค๋ฒํค๋๋ก ์ธํด ์คํ๋ ค ๋จ์ผ ์ค๋ ๋ ๊ตฌํ๋ณด๋ค ๋ ๋๋ฆฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค. - ์์๋๋ก GIL์ด ๋นํ์ฑํ๋ 3.13์์
threading
๊ธฐ๋ฐ ๊ตฌํ์ด ๊ฐ์ฅ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์์ต๋๋ค. GIL์ด ๋ ์ด์ ์ค๋ ๋์ ๋ณ๋ ฌ ์คํ์ ์ ํํ์ง ์๊ฒ ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค. - ๊ทธ๋ฌ๋ free-threaded ๋น๋์์๋ GIL์ ํ์ฑํ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ค๋ฅธ ๋ชจ๋ ๊ตฌํ์์ ์๋นํ ์ฑ๋ฅ ์ ํ๊ฐ ๊ด์ฐฐ๋์์ต๋๋ค. ์ด๋ ์ฃผ๋ก free-threaded ๋น๋์์ specializing adaptive interpreter(SAI[5])๋ฅผ ๋นํ์ฑํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ก ์ธํด ๋ค๋ฅธ ๊ตฌํ๋ค์ ์ฑ๋ฅ์ด ๋์ ๋๊ฒ ๊ฐ์ํ์ต๋๋ค. ์ด๋ฌํ ์ค๋ฒํค๋๋ 3.14 ๋ฆด๋ฆฌ์ค์์ ๊ฐ์ ๋ ์์ ์ ๋๋ค. ํด๋น ๋ฒ์ ์์๋ specializing adaptive interpreter๊ฐ ์ค๋ ๋ ์์ ์ฑ์ ํ๋ณดํ์ฌ ์ฌํ์ฑํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ ์์ ์์๋ ๋ง์ ๋ณ๋ ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ free-threaded ๋น๋๋ก์ ์ ํ์ด ์์ฐ์ค๋ฌ์ด ์ ํ์ด ๋ ๊ฒ์ด๋ฉฐ, ์ฑ๋ฅ ๋ณํ๋ฅผ ์ธก์ ํ๋ ๊ฒ๋ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ๊ทธ๋ํ ํฌ๊ธฐ์์๋ ๊ฒฐ๊ณผ๋ ๋งค์ฐ ์ ์ฌํ์ผ๋ฉฐ, ๋์ผํ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ด๋ฒ ์ธก์ ์ ํตํด ํ์ด์ฌ 3.13์ ์๋ก์ด free-threaded ๋น๋๊ฐ ๋ณ๋ ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฉฐ, multiprocessing
์ ๋งค์ฐ ์ ์๋ฏธํ ๋์์ด ๋ ์ ์์์ ํ์ธํ์ต๋๋ค. ๋ค๋ง ์์ง์ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ฉฐ, ์ ๋ฐ์ ์ธ ์ฑ๋ฅ ์ ํ๋ก ์ธํด ํ๋ก๋์
ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ์๋ ์ด๋ฅธ ๋จ๊ณ์ด์ง๋ง, ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ๋งค์ฐ ์ ๋งํ ์ง์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ์ฌํญ
์ด๋ฒ ๋ฒค์น๋งํฌ์๋ Python 3.12์์ ๋์
๋ GIL ์์ด Python ์ฝ๋๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ์์ธ subinterpreters[6]๋ ํฌํจ๋์ง ์์์ต๋๋ค. Subinterpreters๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์์ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์๋ค๋ณด๋ค ๋๋ฆฐ ๊ฒ์ผ๋ก ํ์ธ๋์๋๋ฐ, ์ด๋ ์ฃผ๋ก ๋ฐ์ดํฐ ๊ณต์ ์ ์์ปค ๊ฐ ํต์ ๋ฌธ์ ๊ฐ ์์ง ์์ ํ ํด๊ฒฐ๋์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค. ํ์ง๋ง ์ด๋ฌํ ๋ฌธ์ ๋ค์ด ํด๊ฒฐ๋๋ค๋ฉด, multiprocessing
์ ํ๋ฅญํ ๋์์ด ๋ ์ ์์ ๊ฒ์
๋๋ค.
์๋ฌธ
GIL: ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ํ์ด์ฌ ์ฝ๋๋ฅผ ์คํํ ์ ์๋๋ก ํ๋ ์ ๊ธ ์ฅ์น โฉ๏ธ
JIT: ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํด ์ฑ๋ฅ์ ํฅ์์ํค๋ ์ปดํ์ผ ๊ธฐ์ โฉ๏ธ
mimalloc: Microsoft๊ฐ ๊ฐ๋ฐํ ๊ณ ์ฑ๋ฅ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์๋ก, ์ผ๋ฐ malloc๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ์ ์ ์ต์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ โฉ๏ธ
์ฒญํฌ: ํฐ ๋ฐ์ดํฐ๋ฅผ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋ ์ ํ๋์ฉ ์ฒ๋ฆฌํ๋ ๋ฐฉ์ โฉ๏ธ
SAI: ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ์ต์ ํํ๋ ํน๋ณํ ์ข ๋ฅ์ ์ธํฐํ๋ฆฌํฐ โฉ๏ธ
subinterpreters: ํ๋์ ํ๋ก์ธ์ค ์์์ ์ฌ๋ฌ ๊ฐ์ ์์ ํ ๋ ๋ฆฝ๋ ํ์ด์ฌ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์คํํด GIL ์์ด ์ง์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ์ด์ฌ 3.12์ ๊ธฐ๋ฅ ์ค ํ๋. โฉ๏ธ