호출된 함수
가 호출한 함수
에게 제어권을 건네주는 유무의 차이라고 볼 수 있다.
함수 A,B가 있고, A 안에서 B를 호출했다고 가정해보자.
이때 호출한 함수는 A고, 호출된 함수는 B가 된다. 현재 B가 호출되면서 B는 자신의 일을 진행해야 한다.
(제어권이 B에게 주어진 상황)
즉, 호출된 함수에서 일을 시작할 때 바로 제어권을 넘겨주느냐, 할 일을 마치고 넘겨주느냐에 따라 Block / Non-block으로 나누어진다고 볼 수 있다.
동기/비동기는 일을 수행중인 동시성
에 주목하자.
함수 A,B가 있고, A 안에서 B를 호출했다고 가정해보자.
함수 B의 수행 결과나 종료 상태를 A가 지속적으로 신경쓰고 있는지의 유무 차이라고 생각하면 된다.
즉, 호출된 함수(B)를 호출한 함수(A)가 신격쓰는지, 호출된 함수(B) 스스로 신경쓰는지에 따라 동기 / 비동기로 나누어진다고 볼 수 있다.
비동기는 호출시 Callback을 전달하여 작업의 완료 여부를 호출한 함수에게 답하게 된다.
(Callback이 오기 전까지 호출한 함수(A)는 신경쓰지 않고 다른 일을 할 수 있음)
상황 : 치킨집에 직접 치킨을 사러감
1) Blocking & Synchronous
나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네 금방되니까 잠시만요!
나 : 넹
-- 사장님 치킨 튀기는 중--
나 : (아 언제 되지?..궁금한데 그냥 멀뚱히 서서 치킨 튀기는거 보면서 기다림)
2) Blocking & Asynchronous
나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네 금방되니까 잠시만요!
나 : 앗 넹
-- 사장님 치킨 튀기는 중--
나 : (언제 되는지 안 궁금함, 잠시만이래서 다 될때까지 서서 붙잡힌 상황)
3) Non-blocking & Synchronous
나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 넹
-- 사장님 치킨 튀기는 중--
(5분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요
(10분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요ㅠ
(15분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요ㅠㅠ
4) Non-blocking & Asynchronous
나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 넹
-- 사장님 치킨 튀기는 중--
나 : (앉아서 다른 일 하는 중)
...
사장님 : 치킨 나왔습니다
나 : 잘먹겠습니다~