Python GIL

GILμ΄λž€?

  • GIL 은 μŠ€λ ˆλ“œμ—μ„œ μ‚¬μš©λ˜λŠ” Lock 을 인터프리터 레벨둜 ν™•μž₯ν•œ κ°œλ…

  • μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ”κ±Έ λ°©μ§€ν•œλ‹€

    • μ–΄λŠ μ‹œμ μ΄λ“  ν•˜λ‚˜μ˜ Bytecode 만이 μ‹€ν–‰λ˜λ„λ‘ κ°•μ œν•œλ‹€

  • 각 μŠ€λ ˆλ“œλŠ” λ‹€λ₯Έ μŠ€λ ˆλ“œμ— μ˜ν•΄ GIL 이 ν•΄μ œλ˜κΈΈ κΈ°λ‹€λ¦° 후에야 싀행될 수 μžˆλ‹€

    • λ©€ν‹° μŠ€λ ˆλ“œλ‘œ λ§Œλ“€μ—ˆμ–΄λ„ 본질적으둜 μ‹±κΈ€ μŠ€λ ˆλ“œλ‘œ λ™μž‘

μž₯점

: GIL 을 ν™œμš©ν•œ λ©€ν‹° μŠ€λ ˆλ“œκ°€ 그렇지 μ•Šμ€ λ©€ν‹° μŠ€λ ˆλ“œλ³΄λ‹€ κ΅¬ν˜„μ΄ μ‰¬μš°λ©°, 레퍼런슀 μΉ΄μš΄νŒ…μ„ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ 관리 λ°©μ‹μ—μ„œ GIL 덕뢄에 μ˜€λ²„ν—€λ“œκ°€ 적어 μ‹±κΈ€ μŠ€λ ˆλ“œμΌ λ•Œ fine grained lock 방식 보닀 μ„±λŠ₯이 μš°μ›”ν•˜λ‹€

단점

μ„±λŠ₯ 문제

  • GIL λ•Œλ¬Έμ— μ„±λŠ₯ λ¬Έμ œκ°€ λŒ€λ‘λ˜λŠ” κ²½μš°λŠ” μ••μΆ•, μ •λ ¬, 인코딩 λ“± μˆ˜ν–‰μ‹œκ°„μ— CPU 의 영ν–₯이 큰 μž‘μ—…(CPU bound)을 λ©€ν‹° μŠ€λ ˆλ“œλ‘œ μˆ˜ν–‰ν•˜λ„λ‘ ν•œ κ²½μš°λ‹€

  • 이 땐 GIL λ•Œλ¬Έμ— λ©€ν‹° μŠ€λ ˆλ“œλ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•΄λ„ μ‹±κΈ€ μŠ€λ ˆλ“œμΌ λ•Œμ™€ λ³„λ°˜ 차이가 λ‚˜μ§€ μ•ŠλŠ”λ‹€

  • 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„  λ©€ν‹° μŠ€λ ˆλ“œλŠ” 파일, λ„€νŠΈμ›Œν¬ IO 같은 IO bound ν”„λ‘œκ·Έλž¨μ— μ‚¬μš©ν•˜κ³  λ©€ν‹° ν”„λ‘œμ„ΈμŠ€λ₯Ό ν™œμš©ν•΄μ•Όν•œλ‹€

Last updated