정의
바쁜 대기(또는 바쁜 웨이팅)는 컴퓨터 과학 및 운영 체제 분야에서 사용되는 개념으로, 프로세스나 스레드가 특정 조건이 만족될 때까지 지속적으로 상태를 확인하면서 CPU를 점유한 채 대기하는 방식을 의미한다. 이 방식에서는 대기 중인 작업이 실제로 수행할 작업을 수행하지 않으며, 조건이 충족될 때까지 반복적으로 검사(spin)한다.
주요 특징
- CPU 점유: 대기 동안에도 프로세스가 CPU를 계속 사용한다.
- 짧은 대기 시간: 잠재적인 대기 시간이 매우 짧고, 컨텍스트 스위치에 드는 오버헤드가 없을 경우 효율적일 수 있다.
- 자원 낭비 위험: 대기 시간이 길어지면 다른 프로세스가 사용할 수 있는 CPU 자원을 불필요하게 차지하게 된다.
사용 맥락
- 스핀락(spin lock): 다중 프로세서 환경에서 자원을 보호하기 위해 바쁜 대기를 활용하는 잠금 메커니즘.
- 폴링(polling): 입출력 장치나 이벤트가 발생했는지 주기적으로 확인할 때 사용.
- 실시간 시스템: 응답 시간이 극히 짧아야 하는 상황에서 컨텍스트 스위치 비용을 최소화하기 위해 선택될 수 있다.
장점
- 컨텍스트 스위치가 발생하지 않아 오버헤드가 감소한다.
- 짧은 대기 시간에 대해 빠른 응답이 가능하다.
단점
- 대기 시간이 길어질 경우 CPU 활용 효율이 크게 저하된다.
- 전력 소비가 증가할 수 있다.
관련 개념
- 조건 변수(condition variable), 세마포어(semaphore), 뮤텍스(mutex) 등과 대비되는 차단(blocking) 방식의 대기.
- 스핀 대기(spin waiting): 바쁜 대기의 다른 표현으로, 동일한 의미로 사용된다.
어원 및 번역
'바쁜 대기'는 영어 용어 busy waiting을 한국어로 직역한 표현이다. 'busy'는 ‘바쁜’을, 'waiting'은 ‘대기’를 의미한다. 따라서 '바쁜 대기'는 ‘대기 상태이지만 동시에 작업을 수행하지 않고 계속해서 확인한다’는 의미를 함축한다.
실제 활용 예시
while (!lock_acquired) {
// 조건이 충족될 때까지 계속 검사
}
위와 같은 루프는 전형적인 바쁜 대기의 구현 예이다.
주의 사항
바쁜 대기는 대기 시간이 짧고, 시스템의 전체적인 부하가 낮은 경우에 제한적으로 사용하는 것이 권장된다. 대기 시간이 예측 불가능하거나 장기적으로 지속될 가능성이 있는 경우, 블로킹 방식(예: 세마포어, 뮤텍스)을 사용하는 것이 일반적으로 더 효율적이다.