[Python3] GIL (Global Interpreter Lock)
2022. 5. 15. 17:21
Python3
GIL 이란? Global Interpreter Lock의 약자로 전역 인터프리터 락이다. 여러 개의 쓰레드가 파이썬 코드를 동시에 실행하지 못하도록 하는 것이다. 한 프로세스 내에서, Python 인터프리터는 한 시점에 하나의 쓰레드에 의해서만 실행될 수 있다. 멀티 쓰레딩이 불가능하다는 것이 아니다. 원래 멀티 코어라면 멀티 쓰레딩 시에 여러 개의 쓰레드가 여러 코어 상에서 병렬(Parallel) 실행될 수 있는데, Python에서는 그러한 병렬 실행이 불가능하다. GIL이 있는 이유 파이썬에서 모든 것은 객체이고 이것들은 Reference Count가 관리가 된다. Reference Count가 0이 되면 Garbage collector가 객체를 메모리 해제시킨다. 그러나 여러개의 쓰레드가 동시에 ..
[Python3] local, global 변수 규칙
2022. 5. 1. 14:25
Python3
아래 두 코드 중 하나는 에러가 발생한다. 정답을 보지 말고 생각을 해보자! 1번 코드 x = 1 def f(): y = x return y print(f()) 2번 코드 x = 1 def f(): y = x x = 2 return y print(f()) 정답은 2번 코드가 에러가 발생한다. 거의 동일한 코든데 왜 하나는 에러가 발생하고 하나는 정상 동작할까? 그 이유는 파이썬의 local, global 변수 규칙에서 찾을 수 있다. 파이썬에서는 함수 전체를 보고 global 변수인지 local 변수인지 결정을 한다. 함수 전체에서 reference만 일어난다면 이는 암묵적으로 global이라 판단한다. 그러나 assign이 한 번이라도 일어난다면 이는 local 변수로 판단을 한다. 위의 1번 코드에선..