728x90

Python μ „μ—­ 인터프리터 락 GIL

파이썬 인터프리터 락(Python Interpreter Lock, GIL)은 νŒŒμ΄μ¬μ—μ„œ λ©€ν‹°μŠ€λ ˆλ“œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  λ•Œ λ°œμƒν•˜λŠ” λ¬Έμ œμ΄λ‹€.

GIL은 CPython μΈν„°ν”„λ¦¬ν„°μ—μ„œ μ‹€ν–‰λ˜λŠ” 파이썬 μ½”λ“œμ˜ 싀행을 λ‹΄λ‹Ήν•˜λŠ” μ „μ—­ 락이닀. 이 락은 λͺ¨λ“  파이썬 μŠ€λ ˆλ“œκ°€ μ‹€ν–‰ 쀑인 파이썬 λ°”μ΄νŠΈμ½”λ“œμ—μ„œ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ§Œ μ‹€ν–‰ν•˜λ„λ‘ 보μž₯ν•œλ‹€. 

 

Cpython Wiki 1994λ…„ 1μ›” 26일 λ°œν‘œ

 

 Wiki발 자료λ₯Ό 보면 1994λ…„ 1μ›” 26일 λ°œν‘œλ‘œ μƒλ‹Ήνžˆ 였래된 ꡬ쑰체이닀. 이 μ‹œκΈ°μ— 단일 μ½”μ–΄μ—μ„œ μž‘λ™ν•˜λŠ” 컴퓨터λ₯Ό 주둜 μ‚¬μš©ν•΄ λ©€ν‹°μŠ€λ ˆλ“œμ— λŒ€ν•œ κ³ λ―Ό 없이 κ΅¬ν˜„ν•˜κ²Œ λ˜μ—ˆλ‹€. 

 

 

결과적으둜 파이썬의 λ™μ‹œμ„± μ²˜λ¦¬μ— μ œν•œμ΄ 생겼닀. GIL의 λ¬Έμ œμ μ€ λ©€ν‹°μ½”μ–΄ CPUμ—μ„œ CPU λ°”μš΄λ“œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ©€ν‹°μŠ€λ ˆλ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯을 μ €ν•˜μ‹œν‚¬ 수 μžˆλ‹€.

 

 

μ™œλƒν•˜λ©΄ ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ§Œ μ‹€ν–‰λ˜λ―€λ‘œ λ‹€λ₯Έ μŠ€λ ˆλ“œλŠ” λŒ€κΈ° μƒνƒœκ°€ λ˜μ–΄ CPU μžμ›μ„ ν™œμš©ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. ν•˜μ§€λ§Œ GIL은 파이썬 μΈν„°ν”„λ¦¬ν„°μ˜ μ•ˆμ •μ„±μ„ μœ μ§€ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•œλ‹€. 파이썬 μΈν„°ν”„λ¦¬ν„°μ˜ λ§Žμ€ κΈ°λŠ₯κ³Ό ν™•μž₯ λͺ¨λ“ˆμ΄ GIL에 μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ— GIL을 μ œκ±°ν•˜κΈ°λŠ” 쉽지 μ•Šλ‹€. (그만큼 Interpreter의 νŽΈμ˜μ„±) λ”°λΌμ„œ νŒŒμ΄μ¬μ—μ„œλŠ” λ©€ν‹°μŠ€λ ˆλ“œ μž‘μ—…μ΄ ν•„μš”ν•œ 경우, 병렬 처리 라이브러리λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ λ©€ν‹°ν”„λ‘œμ„Έμ‹±μ„ μ΄μš©ν•˜λŠ” 것이 쒋은 해결책이닀.

 

λ°˜μ‘ν˜•
λ‹€ν–ˆλ‹€