동시성, 병렬성, 네트워크 프로그래밍 시 너무너무 중요한 개념인 블로킹/논블로킹, 싱크/에이싱크에 대해서 알아보자.

Blocking과 Non-Blocking은 함수 호출의 반환 방식(제어권)에 대한 개념
스레드의 상태라고 생각
→ 기다리냐 마느냐의 차이
Synchronous와 Asynchronous는 작업의 순서와 흐름 제어 방식에 대한 개념
코드 흐름의 방식이라고 생각
→ 순차적으로 처리하냐, 병렬적으로 처리하냐의 차이
| 구분 | 설명 |
|---|---|
| Blocking + Synchronous | 요청을 보내고, 작업이 끝날 때까지 기다림. 응답을 받아야 다음 작업 진행. |
| Blocking + Asynchronous | 요청은 비동기로 보내지만, 결과를 받을 때까지 블로킹되어 다른 작업을 하지 못함. 흔하지 않음. |
| Non-Blocking + Synchronous | 결과를 기다리지는 않지만, 응답을 받아야 다음 작업을 수행. |
| Non-Blocking + Asynchronous | 요청을 보내고 기다리지 않으며, 결과는 나중에 콜백, 이벤트, Future, Promise 등으로 처리. 성능과 응답성이 중요한 시스템에서 많이 사용됨. |
친구에게 전화를 건다.
친구가 받을 때까지 기다린다.
친구와 통화가 끝난 후 청소(다른 일)를 시작한다.
→ 현실에서 잘 쓰이지 않음.
친구한테 카톡을 보낸다.
답장이 올 때까지 멍하니 있는다. (언제 답장이 올 지는 궁금하지 않음!)
답장이 오고 나면 청소(다른 일)을 시작한다.
→ 현실 세계에서 표현하기 어려운 예시. 잘 사용되지 않음.
친구한테 카톡을 보낸다.
답장이 없다.
기다린다..
답장이 없다.
기다린다..
답장이 올 때까지 다음 일을 하지 못한다!
친구한테 카톡을 보낸다.
청소를 한다.
답장 알림(콜백)이 왔다!
| 구분 | 의미 |
|---|---|
| Blocking | 작업이 끝날 때까지 대기 |
| Non-Blocking | 작업 완료를 기다리지 않음 |
| Synchronous | 응답을 받아야 다음 작업 진행 |
| Asynchronous | 응답 없이도 다음 작업 진행 가능, 응답은 나중에 처리 |