질문 24 · 실전 면접 답변
Blocking과 Non-blocking은 동기·비동기와 어떻게 다른가요?
이렇게 답해 보세요 (핵심 답변)
Blocking과 Non-blocking은 호출된 작업이 끝날 때까지 현재 실행 흐름(제어권)을 멈춰 세우는지 여부를 뜻하고, 동기와 비동기는 작업의 완료 결과와 후속 처리를 호출 순서에 맞춰 바로 이어가는지 아니면 나중에 전달받아 실행하는지를 뜻합니다. 예를 들어 브라우저의 fetch는 기다리는 동안 메인 스레드를 막지 않는 Non-blocking 비동기 API이지만, 응답을 받은 뒤 콜백 안에서 수억 번의 루프 계산을 돌리면 그 시간 동안은 메인 스레드가 Blocking되어 화면과 입력이 멈추게 됩니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 네트워크나 타이머를 기다리는 대기 시간(I/O)과 완료 후 JavaScript 콜백이 CPU를 점유해 실행되는 시간을 분리해서 봐야 합니다.
- async 함수로 감싸더라도 첫 번째 await를 만나기 전이나 await 이후에 긴 동기 연산이 있으면 메인 스레드를 그대로 막습니다.
면접에서 자주 하는 실수
비동기 API를 사용했다고 해서 화면 멈춤이 절대 발생하지 않는다고 단정하면 안 되며, 콜백 내부의 CPU 연산량도 함께 확인해야 합니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 24번을 바탕으로 질문과 답변을 새로 정리했습니다.