인터럽트 vs 폴링: 차이점과 사용 시기

프로세서가 장치에 처리가 필요하다는 것을 알아내는 방법은 두 가지입니다. 폴링에서는 CPU가 루프를 돌며 장치 상태를 계속 확인합니다. 인터럽트에서는 장치가 CPU에 신호를 보내고, CPU는 하던 일을 잠시 멈추고 작은 핸들러를 실행한 뒤 다시 재개합니다. 폴링은 단순하고 예측 가능하지만 시간을 낭비하고, 인터럽트는 효율적이고 응답이 빠르지만 오버헤드가 있고 프로그램의 동작을 파악하기가 더 어렵습니다.

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

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

폴링
이벤트가 빈번하거나 루프가 단순하며, 핸들러의 복잡성 없이 예측 가능한 타이밍을 원할 때.
인터럽트
이벤트가 드물거나 예측할 수 없고, 빠른 응답과 저전력이 필요하며, CPU가 다른 일을 할 수 있을 때.
혼합
일부 시스템은 둘을 결합합니다. 인터럽트로 첫 이벤트를 알리고, 트래픽이 많은 동안에는 드라이버가 폴링하는 방식으로, 고속 네트워크 드라이버가 그 예입니다.

자주 묻는 질문

인터럽트와 폴링 중 어느 쪽이 더 좋은가요?

항상 한쪽이 좋은 것은 아닙니다. 인터럽트는 빠른 응답을 주고 CPU를 슬립시킬 수 있으며, 폴링은 단순하고 예측 가능합니다. 드문 이벤트에는 인터럽트를, 매우 빈번한 이벤트에는 폴링을 쓰세요.

인터럽트 핸들러는 무엇을 해야 하나요?

짧아야 합니다. 최소한의 일만 하고, 플래그를 설정하거나 작업을 큐에 넣은 뒤 반환하세요. 핸들러 안의 긴 작업이나 블로킹 호출은 응답성을 해칩니다.

인터럽트 폭주란 무엇인가요?

이벤트가 너무 빨리 도착해서 CPU가 핸들러에 진입하고 나오는 데 모든 시간을 쓰는 상황입니다. 이럴 때 고속 네트워크 드라이버는 폴링으로 전환합니다.

인터럽트가 전력을 절약하는 이유는 무엇인가요?

CPU가 계속 깨어 확인하는 대신, 이벤트가 깨울 때까지 슬립할 수 있기 때문입니다.

주요 용어 설명

割り込み
外部機器からの要求などに応じて、実行中の処理を一時的に中断し、対応する処理を優先して行うCPUの仕組み。終わると元の処理に戻る。
ポーリング
CPUが周辺回路の状態を繰り返し調べに行って、変化を見つける方式。単純だが、何も起きていなくても調べ続けるので時間と電力を使う。
割り込みハンドラ
割り込みや例外が起きたときにCPUが実行する処理。中断した処理の状態を保存し、原因に応じた処理をして、元の処理に戻る。処理はできるだけ短くするのが原則。

관련 비교