πŸ™ˆ 파이썬 λ°λ“œλ½ & 락

may_soouuΒ·2020λ…„ 12μ›” 25일
0
post-thumbnail

λ½μ΄λž€?
νŒŒμ΄μ¬μ—μ„œλŠ” GIL (global interpreter lock) λ°©μ‹μœΌλ‘œ 인터프리터에 락을 κ²λ‹ˆλ‹€.

인터프리터 : ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό λ°”λ‘œ μ‹€ν–‰ν•˜λŠ” 컴퓨터 ν”„λ‘œκ·Έλž¨ λ˜λŠ” ν™˜κ²½
락을 건닀 : 칸이 ν•˜λ‚˜ 뿐인 ν™”μž₯싀에 μ‚¬λžŒλ“€μ΄ μ•žμ‚¬λžŒμ΄ λ‚˜μ˜€κΈ°κΉŒμ§€λ₯Ό κΈ°λ‹€λ¦¬λŠ” κ²ƒμ²˜λŸΌ, 미리 μ„ μ ν•œ μ‚¬λžŒμ΄ 락을 κ±Έλ©΄ μŠ€λ ˆλ“œλŠ” 락이 풀릴 λ•Œ κΉŒμ§€ κΈ°λ‹€λ¦Ό.
즉! λ™μ‹œμ— ν•˜λ‚˜ 이상 μŠ€λ ˆλ“œκ°€ 싀행이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.(닀쀑 μ½”μ–΄κ°€ μ•„λ‹˜)

πŸ“Œ 그럼, νŒŒμ΄μ¬μ€ μ™œ GIL 방식을 μ±„νƒν–ˆμ„κΉŒ?
1. νŒŒμ΄μ¬μ½”λ“œλŠ” 인터프리터λ₯Ό 톡해 μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ—
2. 파이썬의 λ©μΉ˜κ°€ 크기 λ•Œλ¬Έμ—

πŸ“Œ λ¬Έμ œκ°€ λ˜μ§„ μ•Šμ„κΉŒ?
μ½”μ–΄λ₯Ό ν•˜λ‚˜λ°–μ— μ‚¬μš©ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ— multi threads λ₯Ό μ§€μ›ν•˜λŠ” 것이 μ„±λŠ₯에 큰 λ¬Έμ œκ°€ μžˆμ„ 거라고 생각 ν•  수 도 μžˆμŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž¨μ€ I/O bound 이기 λ•Œλ¬Έμ— 큰 λ¬Έμ œλŠ” μ—†μŠ΅λ‹ˆλ‹€.
I/O bound : 연산보닀, input/output 에 더 μ‹œκ°„μ΄ λ“€μ–΄κ°€λŠ” ν”„λ‘œμ„ΈμŠ€
I/O eventλ₯Ό κΈ°λ‹€λ¦¬λŠ” λ™μ•ˆ λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ CPUλ₯Ό μ‚¬μš©ν•˜λ©΄ 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

πŸ“Œ κ·Έλž˜μ„œ μ–Έμ œ μ“΄λ‹€κ³ ?
μŠ€λ ˆλ“œμ˜ μˆœμ„œλ₯Ό μ œμ–΄ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” 동기화 μˆ˜λ‹¨

λ°λ“œλ½μ΄λž€?
두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€λ‚˜ μŠ€λ ˆλ“œκ°€ μ„œλ‘œ μƒλŒ€λ°©μ˜ μž‘μ—…μ΄ λλ‚˜κΈ°λ§Œμ„ 기닀리고 있기 λ•Œλ¬Έμ— 결과적으둜 아무것도 μ™„λ£Œλ˜μ§€ λͺ»ν•˜λŠ” μƒνƒœ ( 즉 μ„œλ‘œ 간에 λ¬Άμ—¬μžˆλŠ” μƒνƒœ)
κ·Έλž˜μ„œ, 락을 μˆœμ„œλŒ€λ‘œ νšλ“ν•˜λ©΄, ꡐ착 μƒνƒœλ₯Ό 막을 수 μžˆμŠ΅λ‹ˆλ‹€.

GIL μ°Έμ‘°

profile
back-end 개발자

0개의 λŒ“κΈ€