Sync : 직렬적으로 진행합니다.
Blocking : 제어권을 넘겨주지 않습니다.
이에 대한 예시를 들어봅시다.
😹 : 아이스아메리카노 1잔하고, 티라미수 하나 주세요.
☕ : 메뉴 나올때까지 여기 서서 기다려주세요.
😹 : (메뉴 만드는게 궁금해서 지켜봄)
☕ : A-18번 고객님, 주문하신 메뉴 준비되었습니다.
😹 : 네! (신나는 마음으로 바로 들고감)
그렇다면 반대의 경우는 어떨까요?
Async : 병렬적으로 진행합니다.
Non-blocking : 제어권을 넘겨줍니다.
😹 : 아이스아메리카노 1잔하고, 티라미수 하나 주세요.
☕ : 진동벨로 알려드릴게요.
😹 : (자리 잡아서 노트북 꺼내고 친구랑 카톡 중)
☕ : (지이이잉— 지이이잉—)
😹 : (벌떡 일어나서 신나는 마음으로 커피 가지러 감)
그렇다면 나머지 경우들은 어떨까요?
우선 동기적이면서 Non-blocking인 경우를 살펴보겠습니다.
Sync : 직렬적으로 진행합니다.
Non-blocking : 제어권을 넘겨줍니다.
이 경우에는 호출되는 함수는 결과를 처리하는대로 반환하고, 호출하는 함수는 작업 완료 여부를 계속 주시하는 형태로 이루어집니다. 예시를 통해 살펴봅시다.
😹 : 아이스아메리카노 1잔하고, 티라미수 하나 주세요.
☕ : 앉아서 기다려주세요.
😹 : 제꺼 나왔나요?
☕ : 아니요…
😹 : 제꺼 나왔나요?
☕ : 아니요…!!
😹 : 제꺼 나왔나요?
☕ : 아니요…!!!!!
...
반대의 경우는 어떨까요?
Async : 병렬적으로 진행합니다.
Blocking : 제어권을 넘겨주지 않습니다.
이 경우에는 호출되는 함수의 결과에 관심은 없지만 호출하는 함수는 이 결과를 계속 기다리는 형태입니다. 예시를 통해 살펴봅시다.
😹 : 아이스아메리카노 1잔하고, 티라미수 하나 주세요.
☕ : 메뉴 나올때까지 여기 서서 기다려주세요.
😹 : (메뉴 나왔는지 관심도 없음. 그냥 서서 넷플릭스 시청중)