인터럽트 vs 폴링: 차이점과 사용 시기
프로세서가 장치에 처리가 필요하다는 것을 알아내는 방법은 두 가지입니다. 폴링에서는 CPU가 루프를 돌며 장치 상태를 계속 확인합니다. 인터럽트에서는 장치가 CPU에 신호를 보내고, CPU는 하던 일을 잠시 멈추고 작은 핸들러를 실행한 뒤 다시 재개합니다. 폴링은 단순하고 예측 가능하지만 시간을 낭비하고, 인터럽트는 효율적이고 응답이 빠르지만 오버헤드가 있고 프로그램의 동작을 파악하기가 더 어렵습니다.
| 비교 항목 | 폴링 | 인터럽트 |
|---|---|---|
| 동작 방식 | CPU가 상태 레지스터를 반복해서 읽어 장치가 준비되었는지 확인 | 장치가 신호를 올리면 CPU가 작업을 중단하고 인터럽트 핸들러(ISR)를 실행 |
| 대기 중 CPU 사용 | 바쁨: CPU가 확인하는 데 사이클을 소모 | 여유: CPU가 다른 작업을 하거나 슬립할 수 있음 |
| 응답 시간 | 루프의 확인 주기에 따라 결정되며 예측 가능 | 빠름(마이크로초 단위)이지만 마스킹, 우선순위, 컨텍스트 저장에 따라 달라짐 |
| 오버헤드 | 아무 일이 없어도 일정하게 발생 | 이벤트마다 비용 발생; 이벤트 발생률이 매우 높으면 CPU가 감당하지 못할 수 있음(인터럽트 폭주) |
| 복잡도 | 작성과 디버깅이 간단 | 더 복잡함: 핸들러는 짧아야 하고, 메인 코드와 공유하는 데이터는 주의가 필요함(volatile, 원자적 접근) |
| 전력 | CPU를 계속 깨워 둠 | 이벤트가 CPU를 깨울 때까지 저전력 슬립 가능 |
| 타이밍 특성 | 파악하기 쉬움 | 핸들러와 메인 코드 사이에 동시성 버그가 생길 수 있음 |
| 주요 용도 | 매우 빠르거나 연속적인 이벤트, 단순한 프로그램, 고속 네트워크 드라이버 | 타이머, 버튼, 통신 이벤트, 센서 알림, 슬립에서 깨우기 |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.