: 호출된 함수가 호출한 함수에게 제어권을 건네주는 유무의 차이
-> B가 호출되면서 B는 자신의 일을 해야함(제어권이 B에게 주어짐)
Blocking : 함수 B는 할 일을 마칠 때까지 제어권 가짐. A는 B가 마칠 때까지 기다림
Non-Blocking : B가 할 일을 마치지 않아도 A에게 제어권을 넘겨줌. A는 B를 기다리면서 다른 일 가능
-> 호출된 함수에서 일을 시작할 때 제어권을 바로 리턴하냐, 할 일을 마치고 리턴하냐의 차이
: 일을 수행 중인 동시성에 주목
Synchronous : A는 B가 일을 하는 중에 기다리면서, 현재 상태 계속 체크
Asynchronous : B의 수행 상태를 B 혼자 신경쓰면서 처리(Callback)
-> 호출된 함수를 호출한 함수가 신경쓰는지, 호출된 함수 스스로 신경쓰는지의 차이
-> 비동기는 호출 시 Callback을 전달하여 작업의 완료 여부를 호출한 함수에게 알려줌(Callback이 오기 전까지 호출한 함수는 신경쓰지 않고 다른 일을 함)
: 치킨 집에 직접 치킨을 사러 감
나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네 금방되니까 잠시만요!
나 : 넹
-- 사장님 치킨 튀기는 중--
나 : (아 언제 되지?..궁금한데 그냥 멀뚱히 서서 치킨 튀기는거 보면서 기다림)
Blockig : 호출된 함수(사장님)이 일을 마칠 때까지 호출한 함수(나)는 기다림
Synchronous : 호출된 함수(사장님)이 일을 하는 중에 호출한 함수(나)는 치킨 튀기는 거 체크하면서 기다림
나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네 금방되니까 잠시만요!
나 : 앗 넹
-- 사장님 치킨 튀기는 중--
나 : (언제 되는지 안 궁금함, 잠시만이래서 다 될때까지 서서 붙잡힌 상황)
Blocking : 호출된 함수(사장님)이 일을 마칠 때까지 호출한 함수(나)는 기다림
Asynchronous : 호출된 함수(사장님)의 수행 상태가 안 궁금함, 신경 안 씀
나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 넹
-- 사장님 치킨 튀기는 중--
(5분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요
(10분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요ㅠ
(15분뒤) 나 : 제꺼 나왔나요?
사장님 : 아직이요ㅠㅠ
Non-Blocking : 호출한 함수(나)는 호출된 함수(사장님)를 기다리면서 다른 일 할 수 있음
Synchronous : 호출한 함수(나)는 호출됨 함수(사장님)의 수행 상태를 계속 체크함
나 : 사장님 치킨 한마리만 포장해주세요
사장님 : 네~ 주문 밀려서 시간 좀 걸리니까 볼일 보시다 오세요
나 : 넹
-- 사장님 치킨 튀기는 중--
나 : (앉아서 다른 일 하는 중)
...
사장님 : 치킨 나왔습니다
나 : 잘먹겠습니다~
Non-Blocking : 호출한 함수(나)는 호출된 함수(사장님)를 기다리면서 다른 일 할 수 있음
Asynchronous : 호출된 함수(사장님)의 수행 상태가 안 궁금함, 신경 안 씀