Locking Deep Dive - 1
Substack
Multiprocessing 이나 Threading 등을 고민하거나, CS(Critical Section)에 대한 접근을 제어하기 위해서 보통은 Lock을 사용합니다. 오픈소스를 찾아볼 때 가끔 Lock, RLock(Reentrant Lock), Semaphore, Condition, Event 등 다양한 Lock 관련 구현들을 볼 수 있습니다.
그러다가 문득 내부적으로 multiprocessing 모듈에서 Lock이 어떻게 동작하는지 궁금해서 조사해보았습니다.
1/ Multiprocessing 에서 제공하는 Lock, RLock, Semaphore 등은 모두 내부적으로 Semaphore를 활용하여 구현되었습니다. Semaphore는 내부적으로 cpython에서 제공하는 SemLock이라는 C 구현체를 사용합니다.
2/ Multiprocessing 에서 새로운 프로세스를 만드는 방식에는 3가지가 있습니다. Fork는 현재 프로세스를 복사해서 자식을 프로세스를 만드는 방식이고, Spawn은 새로운 파이썬 인터프리터를 가지고 새롭게 시작하는 방식입니다. 마지막으로 Forkserver는 별도의 서버 프로세스를 생성하고, 해당 프로세스가 자식 프로세스를 fork하는 방식입니다.
기본적으로 Unix계열 OS는 3가지 방식을 모두 지원하지만, default로 MacOS는 Spawn 방식을 사용하고, Linux에서는 Fork 방식을 사용합니다. Windows에는 fork 시스템 콜이 없기 때문에, Spawn 방식만 지원합니다.
3/ SemLock Acquire 함수는 먼저 GIL을 해제하지 않고 바로 Lock 획득을 시도합니다. 만약 실패하게 되면, Lock을 잡기 위해 Interrupt를 받을 때까지 대기 상태에 들어갑니다. 다만, 이때는 Blocking IO로 간주되기 때문에 사전에 GIL을 해제하고 대기 상태로 들어갑니다.
4/ SemLock Release 함수는 Lock을 해제할 때까지 시도합니다. 해제가 완료되면, 대기하고 있는 스레드 중 하나는 깨웁니다. 대기하고 있던 스레드는 비로소 Lock를 획득합니다. 다만, 해당 Lock과 별개로, 다음 명령어를 수행하기 위해서는 GIL을 다시 획득해야 합니다.
5/ 내부적으로 Lock은 실제로 Lock 형태로 구현되어 있지 않고, Compare And Swap 방식을 사용합니다. CAS는 Lock-Free 알고리즘을 구현할때 주로 사용하는 패턴인데, 어떠한 값을 비교해서 현재가 같으면, 다음 값으로 교체하는 방식입니다. 이때 해당 교체가 하드웨어 수준에서 Atomic하게 진행되기 때문에, 실제로는 Lock과 같은 효과를 누릴 수 있습니다. Blocking 방식이 아니기 때문에 Non-Blocking 방식으로 애플리케이션을 구현을 할 때 유용하게 활용됩니다.
6/ cpython에서 SemLock이 lock을 획득하거나 해제하는 부분은 glibc에 구현되어 있습니다. 즉, 실제로 CAS를 통해서 값을 변경하고, 획득하지 못할 때 대기하는 부분은 온전히 저수준 API를 구현한 glibc의 몫이고, 그 전/후로 파이썬과 관련된 작업을 수행하는 부분이 cpython에 구현되어 있습니다.
https://open.substack.com/pub/techchallengearena/p/locking-deep-dive-1?r=czded&utm_campaign=post&utm_medium=web&showWelcomeOnShare=true
P.S 배운 내용을 열심히 블로그로 작성해보려고 합니다. 블로그 포스트를 이메일로도 받아보실 수 있으니 많은 관심 부탁드립니다!
링크: https://techchallengearena.substack.com/
#python #lock #multiprocessing
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 6월 9일 오후 8:40
새
... 더 보기정부가 한국의 기술 기업을 크게 키우고자 한다면 한국형이 아니라 글로벌형을 만들고 키워야한다. 소프트웨어, AI는 특히 더욱 그렇다. 한국형은 만들어봐야 한국에서만 경쟁력이 있는 것이니, 그건 경쟁력이 아니라 오히려 상한을 제한하는 것일 뿐이다. 즉, AI에 있어 K-를 붙이는 건 제약일뿐이다.
결
... 더 보기“다른 팀이 무슨 일 하는지 왜 알아야 돼?” 필자는 이 말을 들으면 속으로 안도한다. 만약 이런 표현을 우연히 듣게 됐다면 가슴을 쓸어내리며 감사히 여겨도 좋다. 조직 내 사일로 현상을 알아차리게 됐기 때문이다.
... 더 보기요즘 앤트로픽의 MCP가 핫하네요. MCP에 관한 이야기는 차고 넘치니, 저는 오래전에 이러한 시대를 예견한 제 책을 홍보해봅니다. 🤭
... 더 보기