동기(Synchronous)와 비동기(Asynchronous)
- 동기는 호출한 함수가 작업이 끝날 때까지 기다리는 방식.
즉, 요청을 보내고 결과가 반환될 때까지 아무 일도 하지 않고 기다린다는 의미. - 비동기는 호출한 함수가 작업이 끝날 때까지 기다리지 않고 바로 다음 작업을 수행하는 방식.
결과는 나중에 콜백이나 이벤트를 통해 알려줌
즉, 동기냐 비동기냐는 ‘작업 완료 여부를 누가 신경 쓰는가’에 대한 관심.
- 동기: 호출한 쪽이 작업 완료를 신경 씀
- 비동기: 호출당한 쪽이 작업 완료를 신경 씀 (콜백 등으로 알려줌)
블로킹(Blocking)과 논블로킹(Non-blocking)
- 블로킹은 함수 호출 시, 작업이 끝날 때까지 현재 스레드를 멈추게 함. 즉, 함수가 끝날 때까지 다른 작업을 못함
- 논블로킹은 함수가 바로 리턴되고, 작업이 끝나지 않았더라도 스레드가 다른 일을 할 수 있게 함.
즉, 블로킹/논블로킹은 ‘호출한 함수가 바로 제어권을 되돌려받는가’에 대한 관심.
- 블로킹: 작업이 끝날 때까지 제어권을 안 줌
- 논블로킹: 작업 상태와 관계없이 제어권을 바로 줌
요약
- 동기: 작업 끝났는지 내가 확인
- 비동기: 끝났는지 신경 안 씀, 나중에 결과만 받음
- 블로킹: 스레드가 멈춰서 기다림
- 논블로킹: 스레드는 다른 일 하면서 대기
네 가지 조합과 예시
- 동기 + 블로킹
- 가장 전통적인 방식
- 함수 호출 → 작업 완료될 때까지 기다림 → 결과 반환
- 예시: 전화를 걸고 상대가 받을 때까지 기다림. 직접 기다리고 직접 응답을 확인함.
- 비동기 + 논블로킹
- 현대적인 비동기 처리 방식
- 함수 호출 → 바로 리턴 → 결과는 콜백이나 이벤트로 알려줌
- 예시: 문자를 보내고, 다른 일을 하다가 나중에 답장이 옴. 요청만 하고 기다리진 않음.
- 동기 + 논블로킹
- 함수가 바로 리턴하지만, 호출한 쪽에서 반복적으로 상태를 확인해야 함 (폴링)
- 예시: 계속 전화를 시도하다가 상대가 받을 때까지 반복. 스스로 응답 여부를 확인하고 기다림.
- 비동기 + 블로킹
- 드문 조합. 내부적으로는 블로킹이지만, 결과 처리는 비동기적으로 콜백을 통해 함
- 예시: 전화를 걸었는데, 상대가 받을 때까지 멈춰 있음. 응답은 나중에 상대가 전화로 알려줌. (기다리긴 하지만, 결과는 내가 처리 안 함)

'OS' 카테고리의 다른 글
컨텍스트 스위칭(Context Switching)이란? (0) | 2025.06.25 |
---|---|
캐시 메모리란? (0) | 2025.06.25 |
프로그램은 어떻게 실행되는가 (0) | 2025.06.24 |
스핀락(Spin Lock) (3) | 2025.06.24 |
세마포어(Semaphore) (0) | 2025.06.24 |