루비 스레드 경합: 난투극이 아니다

2025-02-03

오랫동안 루비에서의 "스레드 경합"을 오해했습니다. 혼란스러운 싸움이 아니라, 루비 스레드는 글로벌 가상 머신 락(GVL)을 얻기 위해 정중하게 큐잉합니다. 각 스레드는 GVL을 얻고, 코드를 실행한 다음, 해제하거나 일정 시간(스레드 퀀텀, 기본값 100ms) 후에 선점됩니다. 스레드가 I/O를 수행하거나 퀀텀보다 오래 실행될 때 발생합니다. 이를 이해하는 것은 멀티스레드 애플리케이션 최적화, 특히 CPU 바운드 스레드가 I/O 바운드 스레드를 블로킹하여 테일 레이턴시가 증가하는 것을 방지하는 데 필수적입니다. CPU 바운드 스레드의 우선순위를 낮추거나 스레드 퀀텀을 줄이면 해결할 수 있지만, 최소 슬라이스는 10ms입니다.