IO와 NIO의 차이점을 다루면서 Blocking과 Non-Blocking에 대해 간단히 알아보았다. 하지만 동기와 비동기의 개념과 혼동되어 4가지에 대해 정리해보려고 한다.
호출한 함수 : caller -> A
호출된 함수 : callee -> B
A 함수가 B 함수를 호출했을 때, A가 실행을 멈추고 기다리는가?
즉, 제어권(Control)을 넘기는가? 에 따라 구분된다.
❓제어권❓
코드를 실행할 권리라고 생각하면 된다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다.
ex) 택배로 예시를 들자면 현관 앞에서 택배를 계속 기다리는 것이다.
ex) 택배 주문 후 다른 일을 하는 것이다.
A가 B의 작업 완료 여부를 계속 확인하는가?
즉, 작업 완료 여부를 신경 쓰는가? 에 따라 구분된다.
A 함수가 B 함수를 호출 한 뒤, 함수 B의 리턴값을 계속 확인하면서 신경쓰는 것이다.
ex) 현관문을 열어서 택배가 왔는지 계속 확인하는 것이다.
A 함수가 B 함수를 호출할 때 콜백 함수를 함께 전달해서 함수 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행한다.
A 함수는 B 함수를 호출한 후로 함수 B의 작업 완료 여부에는 신경쓰지 않는다.
ex) 택배가 도착했다는 문자 알림을 받으면 그때 확인하는 것이다.
상사 : 이것좀 부탁해요~
나 : 네 바로 끝나니까 기다려주세요
싱사 : (아무것도 안하고 기다림, 언제끝나는지 궁금)
나 : (타닥타닥..)
상사 : (지켜보는중)
상사 : 오 끝났네요!
상사 : 이것좀 부탁해요~
나 : 넵 (타닥타닥..)
상사 : (할거 하다가) 다하셨나요?
나 : 잠시만요
상사 : (할거 하다가) 다하셨나요?
나 : 네 여기요~
선배 : 이것좀 부탁해요~
나 : 넵 다하고 말씀드릴게요! (타닥타닥..)
선배 : (할일 하는 중)
나 : 끝났어요 여기요!
상사 : 이것좀 부탁해요~
나 : 네 바로 끝나니까 기다려주세요
상사 : (아무것도 안하고 기다림, 언제끝나는지 관심없음)
나 : (타닥타닥..)
나 : 끝났어요!