TL;DR

  • GIL์€ CPython ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์œ ์ € ๊ณต๊ฐ„์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ž ๊ธˆ โ€” ํ•œ ์ˆœ๊ฐ„ ํ•˜๋‚˜์˜ thread๋งŒ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰, ์ปค๋„์€ ์กด์žฌ๋ฅผ ๋ชจ๋ฆ„
  • ์กด์žฌ ์ด์œ ๋Š” ์ฐธ์กฐ ์นด์šดํŒ… โ€” refcount race๋ฅผ GIL ํ•˜๋‚˜๋กœ ์ง๋ ฌํ™”ํ•ด ๋ง‰๊ณ , GIL์ด ์ง€ํ‚ค๋Š” ๊ฑด ๊ฐœ๋ฐœ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋‚ด๋ถ€ ์ƒํƒœ
  • thread์˜ CPU ๋ณ‘๋ ฌ์€ ๋ง‰ํžˆ์ง€๋งŒ I/O ์ค‘์—” ํ’€๋ ค I/O ๋™์‹œ์„ฑ์€ ๊ฐ€๋Šฅ, 3.13๋ถ€ํ„ฐ free-threading ์‹คํ—˜ ์ค‘

AI-assisted


1. GIL์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€

GIL(Global Interpreter Lock)์€ **CPython ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์•ˆ์— ์žˆ๋Š” ํ•˜๋‚˜์˜ ๋ฎคํ…์Šค**๋‹ค. ๊ทœ์น™์€ ๋‹จ์ˆœํ•˜๋‹ค: Python ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ด ์ž ๊ธˆ์„ ์ฅ์–ด์•ผ ํ•˜๊ณ , ์ž ๊ธˆ์€ ํ•˜๋‚˜๋ฟ์ด๋ผ ํ•œ ์ˆœ๊ฐ„์— ํ•˜๋‚˜์˜ thread๋งŒ ์ˆœ์ˆ˜ Python ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

  • ์œ„์น˜: CPython ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋‚ด๋ถ€, ์œ ์ € ๊ณต๊ฐ„์ด๋‹ค. OS๋‚˜ ํ”„๋กœ์„ธ์Šค์˜ ํ‘œ์ค€ ์†์„ฑ์ด ์•„๋‹ˆ๋ผ, CPython์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ž๊ธฐ ๋ฉ”๋ชจ๋ฆฌ์— ๋“  ๋ฝ ๊ฐ์ฒด๋‹ค.
  • ๋ฒ”์œ„: CPython ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํ•˜๋‚˜. ๊ทธ๋ž˜์„œ multiprocessing์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜๋ˆ„๋ฉด ๊ฐ์ž ๋…๋ฆฝ GIL์ด ์ƒ๊ฒจ ์šฐํšŒ๋œ๋‹ค.
  • ๊ฐ•์ œ ์ฃผ์ฒด: CPython ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ฝ”๋“œ ์ž์‹ . ๋ฐ”์ดํŠธ์ฝ”๋“œ ์‹คํ–‰ ๋ฃจํ”„์—์„œ GIL์„ acquireํ•˜๊ณ , ์ผ์ • ๊ฐ„๊ฒฉ์ด๋‚˜ I/O ์ง„์ž… ์‹œ releaseํ•œ๋‹ค.

2. ์™œ ์žˆ๋‚˜ โ€” ์ฐธ์กฐ ์นด์šดํŒ…์„ ์ง€ํ‚ค๋ ค๊ณ 

ํ•ต์‹ฌ ์ด์œ ๋Š” CPython์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ์‹์ธ ์ฐธ์กฐ ์นด์šดํŒ…(reference counting)์ด๋‹ค. ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ โ€œ์ง€๊ธˆ ๋ช‡ ๊ณณ์—์„œ ์ฐธ์กฐ๋˜๋Š”์ง€โ€๋ฅผ ์„ธ๋Š” ์นด์šดํ„ฐ(refcount)๋ฅผ ๊ฐ–๊ณ  ์ด ๊ฐ’์ด 0์ด ๋˜๋ฉด ์ฆ‰์‹œ ํ•ด์ œ๋œ๋‹ค. Python์—์„  ๋ชจ๋“  ๊ฒŒ ๊ฐ์ฒด๋ผ, ๋ณ€์ˆ˜ ๋Œ€์ž…ยทํ•จ์ˆ˜ ์ „๋‹ฌ๋งˆ๋‹ค ์ด refcount๊ฐ€ ์‰ด ์ƒˆ ์—†์ด ์˜ค๋ฅด๋‚ด๋ฆฐ๋‹ค.

๋ฌธ์ œ๋Š” refcount ๊ฐฑ์‹ ์ด ์›์ž์ ์ด์ง€ ์•Š๋‹ค๋Š” ์ ์ด๋‹ค(์ฝ๊ณ  โ†’ ์ฆ๊ฐ€ โ†’ ์“ฐ๊ธฐ). ์—ฌ๋Ÿฌ thread๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด์˜ refcount๋ฅผ ๋™์‹œ์— ๊ฑด๋“œ๋ฆฌ๋ฉด race condition์ด ์ƒ๊ธด๋‹ค.

  • ์นด์šดํŠธ๊ฐ€ ํ‹€์–ด์ ธ ๋„ˆ๋ฌด ์ผ์ฐ ํ•ด์ œ โ†’ use-after-free ํฌ๋ž˜์‹œ
  • ๋˜๋Š” ํ•ด์ œ๊ฐ€ ์•ˆ ๋จ โ†’ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜

GIL์€ ์ด๊ฑธ ํ•œ ๋ฒˆ์— ๋ง‰๋Š”๋‹ค. ํ•œ ์ˆœ๊ฐ„ ํ•˜๋‚˜์˜ thread๋งŒ ์‹คํ–‰ํ•˜๋‹ˆ refcount ์กฐ์ž‘์ด ์ง๋ ฌํ™”๋˜๊ณ  ๋ฝ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ๊ฐ์ฒด์˜ refcount๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๋ณดํ˜ธํ•œ๋‹ค.

"์ง๋ ฌํ™”"์˜ ๋œป โ€” serialize

์—ฌ๊ธฐ์„œ ์ง๋ ฌํ™”๋Š” ์—ฐ์‚ฐ์„ ํ•œ ์ค„๋กœ ์„ธ์›Œ ์ˆœ์ฐจ ์‹คํ–‰์„ ๊ฐ•์ œํ•œ๋‹ค๋Š” ๋œป(serialize)์ด๋‹ค. ๊ฐ์ฒด๋ฅผ ๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”(pickleยทJSON)๋‚˜ DB์˜ serializable ๊ฒฉ๋ฆฌ ์ˆ˜์ค€๊ณผ๋Š” ์ด๋ฆ„๋งŒ ๊ฐ™๊ณ  ๋ฌด๊ด€ํ•˜๋‹ค.

GIL ์—†์ด ๊ฐ์ฒด๋งˆ๋‹ค ๋ฝ์„ ๊ฑธ๋ฉด?

๊ฐ€๋Šฅ์€ ํ•˜์ง€๋งŒ ๋‹จ์ผ thread ์„ฑ๋Šฅ์ด ํญ๋ฝํ•œ๋‹ค. Python์€ ๊ฐ์ฒด๋ฅผ ์›Œ๋‚™ ์ž์ฃผ ๋งŒ๋“ค๊ณ  ์ฐธ์กฐํ•ด์„œ refcount ๊ฐฑ์‹ ๋งˆ๋‹ค ๋ฝ์ด๋‚˜ atomic ์—ฐ์‚ฐ์„ ๊ฑธ๋ฉด ๊ทธ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ง‰๋Œ€ํ•˜๋‹ค. GIL ํ•˜๋‚˜๋กœ ํ‰์น˜๋Š” ํŽธ์ด ๋‹จ์ผ thread์—์„  ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.

๋น„์œ ํ•˜๋ฉด, ๊ฐ์ฒด๋งˆ๋‹ค โ€œ๋ช‡ ๋ช…์ด ์“ฐ๋Š”์ง€โ€ ์ ๋Š” ๋ฐฉ๋ช…๋ก(refcount)์ด ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์ผ๊พผ์ด ๋™์‹œ์— ์ˆซ์ž๋ฅผ ๊ณ ์น˜๋ฉด ํ‹€์–ด์ง„๋‹ค. GIL์€ โ€œ๋ฐฉ๋ช…๋ก์„ ๊ณ ์น˜๋ ค๋ฉด ํ•˜๋‚˜๋ฟ์ธ ํŽœ์„ ์ฅ์–ด์•ผ ํ•œ๋‹คโ€๋Š” ๊ทœ์น™์ด๋ผ ์ž์—ฐํžˆ ์ง๋ ฌํ™”๋œ๋‹ค. GIL ์—†์ด ํ•˜๋ ค๋ฉด ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ ๋ฐฉ๋ช…๋ก๋งˆ๋‹ค ์ž๋ฌผ์‡ ๋ฅผ ๋‹ฌ๊ณ  ๋งค๋ฒˆ ์ž ๊ทธ๊ณ  ํ’€์–ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋” ๋А๋ฆฌ๋‹ค.


3. ์ปค๋„์€ GIL์„ ๋ชจ๋ฅธ๋‹ค

GIL์€ ์œ ์ € ๊ณต๊ฐ„(์ธํ„ฐํ”„๋ฆฌํ„ฐ)์—์„œ๋งŒ ๊ด€๋ฆฌ๋œ๋‹ค. ์ปค๋„์ด ๋ณด๋Š” ๊ฒƒ์€ ๊ทธ๋ƒฅ ์—ฌ๋Ÿฌ OS thread(๋ฆฌ๋ˆ…์Šค์˜ task_struct)์ผ ๋ฟ์ด๋‹ค.

  • GIL์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” thread๋Š”, ์ปค๋„ ๋ˆˆ์—๋Š” โ€œ์–ด๋–ค ์œ ์ € ๊ณต๊ฐ„ ๋™๊ธฐํ™” ๊ฐ์ฒด๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ sleep ์ค‘์ธ threadโ€๋กœ๋งŒ ๋ณด์ธ๋‹ค. ๊ทธ๊ฒŒ โ€œGILโ€์ด๋ผ๋Š” ์˜๋ฏธ๋Š” ์ปค๋„์ด ๋ชจ๋ฅธ๋‹ค.
  • ์ฆ‰ โ€œ์ด thread๊ฐ€ GIL์— ๋ง‰ํ˜”๋‹คโ€๋ฅผ ์•„๋Š” ๊ฒƒ์€ ์ปค๋„์ด ์•„๋‹ˆ๋ผ CPython ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋‹ค.

๊ฑด๋ฌผ ๊ด€๋ฆฌ์ธ(์ปค๋„)์ด ์ผ๊พผ(thread)๋“ค์„ ๋ฐฉ(์ฝ”์–ด)์— ๋ฐฐ์น˜ํ•˜์ง€๋งŒ ํšŒ์‚ฌ ๋‚ด๋ถ€ ๊ทœ์น™์ธ โ€œ๊ธฐ๋ก ํŽœ(GIL)โ€œ์€ ํšŒ์‚ฌ(์ธํ„ฐํ”„๋ฆฌํ„ฐ)๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ๋งŒ๋“  ๊ฒƒ์ด๋ผ ๊ด€๋ฆฌ์ธ์€ ๊ทธ ์กด์žฌ๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.


4. GIL์ด ์ง€ํ‚ค๋Š” ๊ฒƒ vs ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€ํ‚ค๋Š” ๊ฒƒ

โ€œ๊ณต์œ  ๋ฌธ์ œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ lock์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š๋‚˜โ€๋ผ๋Š” ์˜๋ฌธ์ด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค. ์—ฌ๊ธฐ์—” ๋‘ ์ธต์œ„๊ฐ€ ์žˆ๋‹ค.

  • ๊ฐœ๋ฐœ์ž์˜ ๋ฐ์ดํ„ฐ(๋‚ด ๋ณ€์ˆ˜ยท์ž๋ฃŒ๊ตฌ์กฐ): ์ด๊ฑด ๊ฐœ๋ฐœ์ž๊ฐ€ lock์œผ๋กœ ์ง€ํ‚ค๋Š” ๊ฒŒ ๋งž๋‹ค. ๊ทธ๋ฆฌ๊ณ  GIL์ด ์žˆ์–ด๋„ ์ด๊ฑด ์—ฌ์ „ํžˆ ๊ฐœ๋ฐœ์ž ๋ชซ์ด๋‹ค. GIL์ด ์žˆ๋‹ค๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ race condition์ด ๋‹ค ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.
  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋‚ด๋ถ€ ์ƒํƒœ(refcount, ๋‚ด๋ถ€ ์ž๋ฃŒ๊ตฌ์กฐ): ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณผ ์ˆ˜๋„ ์†๋Œˆ ์ˆ˜๋„ ์—†๋Š” CPython ๋‚ด๋ถ€๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

GIL์ด ์ง€ํ‚ค๋Š” ๊ฒƒ์€ ํ›„์ž๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋Œ€์‹  ๋ชป ์ง€ํ‚ค๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋‚ด๋ถ€๋ผ, ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์Šค์Šค๋กœ ์ง€์ผœ์•ผ ํ•˜๊ณ  ๊ทธ ์ˆ˜๋‹จ์ด GIL์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ โ€œ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜์ž–์•„โ€๋Š” ์•ž์ชฝ(๊ฐœ๋ฐœ์ž ๋ฐ์ดํ„ฐ)์—” ๋งž์ง€๋งŒ ๋’ค์ชฝ(์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋‚ด๋ถ€)์—” ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค.


5. ๊ฒฐ๊ณผ โ€” ๋ฌด์—‡์ด ๋˜๊ณ  ๋ฌด์—‡์ด ์•ˆ ๋˜๋‚˜

GIL์€ ์‹คํ–‰์„ ์ง๋ ฌํ™”ํ•˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐˆ๋ฆฐ๋‹ค.

  • CPU-bound + thread โ†’ ๋ณ‘๋ ฌ ์•ˆ ๋จ. ๊ณ„์‚ฐ ์ค‘์—๋Š” GIL์„ ๊ณ„์† ์ฅ๊ณ  ์žˆ์–ด thread๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“ค์–ด๋„ ์ˆœ์ˆ˜ Python ์—ฐ์‚ฐ์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋ˆ๋‹ค. ์ „ํ™˜ ๋น„์šฉ ํƒ“์— ์˜คํžˆ๋ ค ๋А๋ ค์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. CPU ๋ณ‘๋ ฌ์ด ํ•„์š”ํ•˜๋ฉด multiprocessing์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜๋ˆ  GIL์„ ์šฐํšŒํ•œ๋‹ค.
  • I/O-bound + thread โ†’ ์“ธ๋ชจ ์žˆ์Œ. thread๊ฐ€ I/O ๋Œ€๊ธฐ(blocking)์— ๋“ค์–ด๊ฐ€๋ฉด GIL์„ ๋†“๋Š”๋‹ค. ๊ทธ๋™์•ˆ ๋‹ค๋ฅธ thread๊ฐ€ GIL์„ ์ฅ๊ณ  ์ง„ํ–‰ํ•˜๋ฏ€๋กœ, ์—ฌ๋Ÿฌ thread๋กœ ๋Œ€๊ธฐ๋ฅผ ๊ฒน์น  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ GIL์ด ๋ง‰๋Š” ๊ฒƒ์€ ์ •ํ™•ํžˆ โ€œ์ˆœ์ˆ˜ Python CPU ์—ฐ์‚ฐ์„ thread๋กœ ๋ณ‘๋ ฌํ™”ํ•˜๋Š” ๊ฒƒโ€๋ฟ์ด๋‹ค. โ€œPython์€ ๋™์‹œ์„ฑ์ด ์•ˆ ๋œ๋‹คโ€๋Š” ํ‹€๋ฆฐ ๋ง์ด๋‹ค.


6. ๋‹ค๋ฅธ ์–ธ์–ด์—” ์™œ ์—†๋‚˜, ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ

GoยทJava์— GIL์ด ์—†๋Š” ๊ฑด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ์–ธ์–ด๋“ค์€ ์ถ”์  GC(tracing garbage collection)๋ฅผ ์“ด๋‹ค โ€” ๋ณ„๋„ GC๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์•ˆ ์“ฐ์ด๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์ฒญ์†Œํ•˜๋ฏ€๋กœ, ๊ฐ์ฒด๋งˆ๋‹ค refcount๋ฅผ ์‹ค์‹œ๊ฐ„ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ refcount race ์ž์ฒด๊ฐ€ ์—†๊ณ , GIL ๊ฐ™์€ ์ „์—ญ ๋ฝ์ด ํ•„์š” ์—†๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌGIL
CPython์ฐธ์กฐ ์นด์šดํŒ…(refcount ์‹ค์‹œ๊ฐ„ ๊ฐฑ์‹ )ํ•„์š”
GoยทJava์ถ”์  GC(refcount ์—†์Œ)๋ถˆํ•„์š”

GIL์€ ๊ฒฐํ•จ์ด๋ผ๊ธฐ๋ณด๋‹ค ์‹œ๋Œ€์  ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋‹ค. Python์ด ํƒœ์–ด๋‚œ 1991๋…„์€ ๋ฉ€ํ‹ฐ์ฝ”์–ด๊ฐ€ ๋“œ๋ฌธ ๋‹จ์ผ CPU ์‹œ๋Œ€๋ผ, โ€œ๋ฉ€ํ‹ฐ์ฝ”์–ด ๋ณ‘๋ ฌ ๋ถˆ๊ฐ€โ€๋ผ๋Š” ๋‹จ์ ์ด ํฌ์ง€ ์•Š์•˜๋‹ค. ์ฐธ์กฐ ์นด์šดํŒ… + GIL์€ ๋‹จ์ผ thread ์„ฑ๋Šฅยท๊ตฌํ˜„ ๋‹จ์ˆœ์„ฑยทC ํ™•์žฅ ํ˜ธํ™˜์„ ์–ป๋Š” ํ•ฉ๋ฆฌ์  ์„ ํƒ์ด์—ˆ๋‹ค. ๋ฉ€ํ‹ฐ์ฝ”์–ด๊ฐ€ ๋ณดํŽธํ™”๋œ ์ง€๊ธˆ ๋ณ‘๋ชฉ์ด ๋์ง€๋งŒ refcount์™€ C ํ™•์žฅ ์ƒํƒœ๊ณ„๊ฐ€ GIL์— ์˜์กดํ•ด ์ œ๊ฑฐ๊ฐ€ ์–ด๋ ค์› ๋‹ค.

๊ทธ๋ž˜์„œ Python 3.13๋ถ€ํ„ฐ GIL์„ ๋„๋Š” free-threading ๋นŒ๋“œ๋ฅผ ์‹คํ—˜์ ์œผ๋กœ ๋„์ž…ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. refcount๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊พธ๊ณ  C ํ™•์žฅ ํ˜ธํ™˜์„ ๋งž์ถ”๋Š” ํฐ ์ž‘์—…์ด๋ผ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€๋งŒ GIL์ด ์–ธ์–ด์˜ ๋ณธ์งˆ์ด ์•„๋‹ˆ๋ผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„ ๊ฒฐ์ •์ž„์„ ๋ณด์—ฌ์ค€๋‹ค. Jython(JVM)ยทIronPython(.NET) ๊ฐ™์€ ๋‹ค๋ฅธ Python ๊ตฌํ˜„์— ์• ์ดˆ์— GIL์ด ์—†๋Š” ๊ฒƒ๋„ ๊ฐ™์€ ๋งฅ๋ฝ์ด๋‹ค.