Blocking vs NonBlocking : 딴 일하고 와도 돼?
차이점 : 호출된 함수가 바로 리턴(제어권 넘기)하느냐 마느냐
NonBlocking : 응 제어권 줄께, 너 딴 일하고 와
호출된 함수가 바로 리턴해 제어권을 넘겨서 호출한 함수는 자기 할 일 한다.
Blocking : 안돼 끝날 때까지 넌 여기서 기다려
호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고
호출한 함수가 다른 일 못하고 대기하게 한다.
Synchronous vs Asynchronous : 작업완료를 어떻게 알래?
차이점 : 호출한 함수가 '호출된 함수의 완료 여부'를 신경쓰냐
Async (Asynchronous, 비동기, 비동기화) : 너가 끝나고 연락해!
호출된 함수에게 callback을 전달 후 호출한 함수는 자기 할 일 한다.
호출되는 함수의 작업이 완료되면 호출된 함수가 전달받은 callback을 실행하므로
=> 호출하는 함수는 작업 완료 여부를 신경쓰지 않는다.
Sync (= Synchronous, 동기, 동기화) : 내가 기다릴께 or 언제끝나?
호출한 함수가
#1) 호출된 함수의 작업 완료 리턴을 대기(+blocking)
또는
#2) 바로 리턴 받더라도 호출한 함수는 자기 할 일하면서 완료 여부를 계속 체크(+non-blocking)
=> 호출하는 함수는작업 완료 여부를 신경쓴다.
A가 B를 호출한다고 가정하고 시계방향 순으로 생각해봄
1) 동기 블러킹(Sync + Blocking)
: B가 작업을 완료하고 결과를 돌려줄 때까지 A는 망부석마냥 오매불망 대기할 것
2) 동기 논블러킹(Sync + Non-blocking)
: B에게 리턴받았지만 A는 딴 일하면서 B에게 계속 연락해 완료여부 체크할 것
3) 비동기 블러킹 (Async + Blocking)
: A는 A대로 대기하고, B는 끝나면 (A가 넘겨준) 콜백 함수를 실행하고 완료하는 바로 앞에 있는데 전화거는 기분...;;
4) 비동기 논블러킹(Async + Non-blocking) << 가장 비동기적인 방식
: A는 딴 일할 거고 B는 끝나면 (A가 넘겨준) 콜백 함수를 실행하고 완료하는 아름다운 각자도생의 길
[출처]
https://developer.ibm.com/articles/l-async/