Sync + Blocking / Async + Non-blocking

Sync : 직렬적으로 진행합니다.

Blocking : 제어권을 넘겨주지 않습니다.

이에 대한 예시를 들어봅시다.

😹 : 아이스아메리카노 1잔하고, 티라미수 하나 주세요.

☕ : 메뉴 나올때까지 여기 서서 기다려주세요.

😹 : (메뉴 만드는게 궁금해서 지켜봄)

☕ : A-18번 고객님, 주문하신 메뉴 준비되었습니다.

😹 : 네! (신나는 마음으로 바로 들고감)

그렇다면 반대의 경우는 어떨까요?

Async : 병렬적으로 진행합니다.

Non-blocking : 제어권을 넘겨줍니다.

😹 : 아이스아메리카노 1잔하고, 티라미수 하나 주세요.

☕ : 진동벨로 알려드릴게요.

😹 : (자리 잡아서 노트북 꺼내고 친구랑 카톡 중)

☕ : (지이이잉— 지이이잉—)

😹 : (벌떡 일어나서 신나는 마음으로 커피 가지러 감)

그렇다면 나머지 경우들은 어떨까요?


Sync + Non-blocking / Async + Blocking

우선 동기적이면서 Non-blocking인 경우를 살펴보겠습니다.

Sync : 직렬적으로 진행합니다.

Non-blocking : 제어권을 넘겨줍니다.

이 경우에는 호출되는 함수는 결과를 처리하는대로 반환하고, 호출하는 함수는 작업 완료 여부를 계속 주시하는 형태로 이루어집니다. 예시를 통해 살펴봅시다.

😹 : 아이스아메리카노 1잔하고, 티라미수 하나 주세요.

☕ : 앉아서 기다려주세요.

😹 : 제꺼 나왔나요?

☕ : 아니요…

😹 : 제꺼 나왔나요?

☕ : 아니요…!!

😹 : 제꺼 나왔나요?

☕ : 아니요…!!!!!

...

반대의 경우는 어떨까요?

Async : 병렬적으로 진행합니다.

Blocking : 제어권을 넘겨주지 않습니다.

이 경우에는 호출되는 함수의 결과에 관심은 없지만 호출하는 함수는 이 결과를 계속 기다리는 형태입니다. 예시를 통해 살펴봅시다.

😹 : 아이스아메리카노 1잔하고, 티라미수 하나 주세요.

☕ : 메뉴 나올때까지 여기 서서 기다려주세요.

😹 : (메뉴 나왔는지 관심도 없음. 그냥 서서 넷플릭스 시청중)