λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🐍 Python

[Python] GILμ΄λž€? νŒŒμ΄μ¬μ—μ„œμ˜ λ©€ν‹°μ“°λ ˆλ“œ

by dev.py 2024. 5. 6.

파이썬 GILμ΄λž€?

νŒŒμ΄μ¬μ€ λ‹€λ₯Έ μ–Έμ–΄ (C++ or Java)의 λ©€ν‹°μ“°λ ˆλ“œμ™€ λ‹€λ₯Έ 점이 μžˆλ‹€.

 

λ©€ν‹° μ“°λ ˆλ“œκ°€ λ©€ν‹° μ“°λ ˆλ“œκ°€ μ•„λ‹ˆλ‹€

 

무슨 말이냐 ν•˜λ©΄ λ™μ‹œμ„±μ„ λ§Œμ‘±ν•˜μ§€ λͺ»ν•œλ‹€.

파이썬 λ©€ν‹°μ“°λ ˆλ“œ

μœ„μ˜ 그림처럼 μ“°λ ˆλ“œλ₯Ό 3개둜 λ‚˜λˆ„μ–΄ μ‹€ν–‰ν•˜λ”λΌλ„ GILλ₯Ό 가진 μ“°λ ˆλ“œλ§Œ μ‹€ν–‰λ˜κ³ , λ‚˜λ¨Έμ§€ μ“°λ ˆλ“œλŠ” GIL release 되기λ₯Ό κΈ°λ‹€λ¦°λ‹€.

λ™μ‹œμ„±μ„ κ°–κΈ° μœ„ν•΄μ„œλŠ” λ©€ν‹° ν”„λ‘œμ„Έμ‹±μ„ ν™œμš©ν•΄μ•Ό ν•œλ‹€.

파이썬 λ©€ν‹° ν”„λ‘œμ„ΈμŠ€

 

λ‹€λ§Œ λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λŠ” λ©€ν‹° μ“°λ ˆλ“œμ— λΉ„ν•΄ μ˜€λ²„ν—€λ“œλ‚˜ 데이터 κ΅ν™˜ 어렀움 λ“±μ˜ 단점이 μžˆλ‹€.

 

λ©€ν‹° μ“°λ ˆλ“œμ˜ μ‚¬μš©

사싀상 CPU μ½”μ–΄λ‚˜ μ“°λ ˆλ“œλ₯Ό λͺ»κ΅΄λ¦¬λŠ”데, λ©€ν‹°μ“°λ ˆλ“œλ₯Ό μ–Έμ œ μ‚¬μš©ν•˜λƒ

I/O Boundλ₯Ό ν•΄κ²°ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

 

DB, API, UI λ“±μ˜ μž‘μ—…λ“€μ€ CPU μž‘μ—… 속도에 λΉ„ν•΄ ν˜„μ €νžˆ λŠλ¦¬κΈ°μ— CPU μž…μž₯μ—μ„œλŠ” I/O μš”μ†Œλ“€λ‘œ 인해 μž‘μ—… 손싀을 μΌμœΌν‚¬ λ•Œκ°€ μžˆλ‹€.

그럴 λ•Œ, λ©€ν‹° μ“°λ ˆλ“œλ₯Ό λ„μž…ν•˜λ©΄ I/O λ°”μš΄λ“œλ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€.

이걸 ν™œμš©ν•˜λŠ”κ²Œ 비동기식 μ²˜λ¦¬μ΄λ‹€. (FastAPIκ°€ λΉ λ₯΄λ‹€κ³  ν•˜λŠ” 이유 쀑 ν•˜λ‚˜)

λ¬Όλ‘  CPU λ°”μš΄λ“œλŠ” λ©€ν‹° ν”„λ‘œμ„Έμ‹±μ„ μ΄μš©ν•΄μ•Ό ν•œλ‹€.

 

GIL ν•΄μ œ

PC μ‹œμž₯은 μ‹±κΈ€ μ½”μ–΄μ˜ μ„±λŠ₯을 μ˜¬λ¦¬λŠ” 것보닀 μ½”μ–΄ 숫자λ₯Ό λŠ˜λ¦¬λŠ” λ°©ν–₯이 μ„±λŠ₯ν–₯상 더 크고 졜근 CPU 듀도 16, 24, 40 μ½”μ–΄ κΉŒμ§€λ„ μžˆκΈ°μ— 파이썬이 CPU μ œλŒ€λ‘œ ν™œμš©ν•˜μ§€ λͺ»ν•˜λŠ 것을  파이썬 μž¬λ‹¨λ„ μ•Œκ³  있고, GIL을 μ—†μ• κΈ° μœ„ν•œ μ‹œλ„λ₯Ό ν•΄μ˜€κ³  μžˆλ‹€.

 

 

[Python] GIL을 ν•΄μ œν•΄λ³΄μž

λ“œλ””μ–΄ Python 3.13.0 μ—μ„œ GIL이 ν•΄μ œ λ˜μ—ˆλ‹€. Python 3.13.0 으둜 λ©€ν‹°μ“°λ ˆλ”© μ„±λŠ₯ ν…ŒμŠ€νŠΈλ₯Ό 해보렀 ν–ˆμ§€λ§Œ, μ‹€νŒ¨ν–ˆλ‹€.μ°Ύμ•„λ³΄λ‹ˆ, 일반 CPython 3.13 에선 아직 μ•ˆλ˜κ³ , GIL을 ν•΄μ œν•˜μ—¬ λΉŒλ“œ 된 CPython을 μ‚¬μš©

du-sungchan-24k.tistory.com