[Javascript] 비동기를 이해하기 위한 개념 (1) - Blocking / Non Blocking & Sync/ Async
Blocking / Non Blocking & Sync/ Async
Blocking / Non Blocking
- Point : 호출되는 함수가 바로 리턴하느냐 마느냐
호출된 함수
가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수를
대기하게 만든다면 Block
호출된 함수
가 자신이 할 일을 채 마치지 않았더라도 바로 제어권을 건네주어(return) 호출한 함수
가 다른 일을 진행할 수 있도록 해주면 Non-block
Synchronous / Asynchronous
- Point : 호출된 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사
호출된 함수
의 수행 결과 및 종료를 호출한 함수
가(호출된 함수
뿐 아니라 호출한 함수
도 함께) 신경 쓰면 Synchronous
호출된 함수
의 수행 결과 및 종료를 호출된 함수
혼자 직접 신경 쓰고 처리(as a callback fn.)하고, 호출하는 함수는 작업 완료 여부를 신경쓰지 않으면 Asynchronous
Sync-Blocking : Blocking & Synchronous
- 결과가 처리되어 나올때까지 기다렸다가 return 값으로 결과를 전달한다.
Async-NonBlocking : Non-blocking & Asynchronous
- 작업 요청을 받아서 별도의 프로세서에서 진행하게 하고 바로 return(작업 끝)한다.
- 결과는 별도의 작업 후 간접적으로 전달(callback)한다.
Sync-NonBlocking : Non-blocking & Synchronous
호출된 함수
가 호출한 함수
에게 제어권을 바로 건네주어(return) 호출한 함수
가 작업을 할 수 있게 되지만(Non-blocked) 호출되는 메서드의 작업 완료 여부를 계속 문의한다.
- 결과가 없다면 바로 return한다.결과가 있으면 바로 결과를 return 한다.(결과가 생길때까지 계속 완료 되었는지 확인)
Async - Blocking : Blocking & Asynchronous
- 호출되는 함수가 바로 return하지 않고, 호출하는 함수는 작업 완료 여부를 신경쓰지 않는다.
- 별다른 장점이 없어 일부러 사용할 필요는 없지만 하나라도 Blocking으로 동작하는 작업이 포함되어 있다면 의도하지 않게 Blocking-Async로 동작할 수 있다.
References