#동기 #비동기 #블로킹 #논블로킹 #메세지 #이벤트 #병렬처리 #Async #Event #콜백
Explanation
동기, 비동기 관련 용어 정리 및 모음
- 제어권 : 자신(함수)의 코드를 실행할 권리, 제어권을 가진 함수는 자신의 코드를 끝까지 실행 한 후 자신을 호출한 함수에게 돌려준다
- 결과값을 기다리는 것 : 함수 a, b 두 개가 존재하면 a에서 b를 호출 했을 떄 a가 b의 결과 값을 기다리느냐 여부(return 여부 및 return 값을 신경쓰는지)
동기(Synchronous)와 비동기(Asynchronous)
처리해야 할 작업들을 어떠한 '흐름'으로 처리 할 것인가에 대한 관점
동기와 비동기의 차이는 호출되는 함수의 작업 완료 여부를 신경쓰는지 여부
호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라, 함수 실행/리턴 순차적인 흐름을 따르느냐, 안따르느냐 관심사
동기
a가 b를 호출한 뒤 b의 리턴 값을 계속 확인하면서 신경쓰는 것
즉, 리턴 값을 받거나 호출되는 함수가 종료되어야 동작
비동기
a가 b를 호출할 때 콜백 함수를 함께 전달 해 b의 작업이 완료되면 함께 보낸 콜백 함수를 실행
즉, a는 b를 호출한 후로 b의 작업 완료 여부를 신경쓰지 않는다(return 상관 없이 동작)
즉 동기와 비동기의 차이는 호출하는 함수의 return값, 호출되는 함수가 종료되는지를 신경 쓰는지 안 쓰는지에 따라서 동작
블로킹(Blocking)과 논블로킹(Non-blocking)
처리되어야 하는 (하나의) 작업이, 전체적인 작업 '흐름'을 막느냐 안막느냐에 대한 관점
블로킹과 논블로킹의 차이는 a가 b를 호출 시 제어권을 어떻게 처리하느냐에 여부
제어권이 누구한테 있느냐가 관심사
블로킹
a가 b를 호출하면, 제어권을 a가 호출한 b에게 넘겨준다

- A함수가 B함수를 호출하면 B에게 제어권을 넘긴다.
- 제어권을 넘겨받은 B는 열심히 함수를 실행한다. A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다.
- B함수는 실행이 끝나면 자신을 호출한 A에게 제어권을 돌려준다.
논블로킹
a가 b를 호출해도 제어권을 그대로 자신이 가지고 있는다

- A함수가 B함수를 호출하면, B 함수는 실행되지만, 제어권은 A 함수가 그대로 가지고 있는다.
- A함수는 계속 제어권을 가지고 있기 때문에 B함수를 호출한 이후에도 자신의 코드를 계속 실행한다.