1. Sync/Asyncronous
- 주로 Sync/Async는 일반적인 Operation 관점에서 얘기한다.
- Call된 Function의 결과를 누가(Caller, Callee) 신경쓰느냐의 차이
1) Syncronous
- Caller가 Function Call의 결과를 신경쓰는 방식
- Function Call을 한 후, 그에 대한 Return이 오기까지 Thread가 대기하는 방식
- ex) HTTP Request를 날린 후, Response가 오기까지 대기
2) Asyncronous
- Callee가 Function Call의 결과를 신경쓰는 방식
- Function Call을 한 후, Call을 한 Function의 결과와 상관없이 완료를 기다리지 않고, 다음 동작을 수행하는 것
- Call Back Function을 Call한 Function에 전달, Function 수행이 끝나고 해당 Call Back Function을 호출
- ex) Ajax async
2. Blocking/Non-Blocking
- Blocking/Non-Blocking은 I/O 관점에서 주로 얘기가 된다.
- Call된 Function이 바로 Return하는가, 작업을 끝낸 후 Return을 하는가의 차이
1) Blocking
- I/O 작업을 수행하는 function이 Call되어 I/O가 끝날 때 까지 해당 Thread는 대기, 작업 종료 후 return
- ex) File I/O
2) Non-Blocking
- I/O를 수행하는 function이 call되었으나, 바로 어떠한 값을 return, 본 Thread는 이후 추가 작업을 수행할 수 있다.
- Caller쪽에서는 해당 Callee의 상태를 확인하며 이후 처리를 결정한다.
* Sync/Async, Blocking/NonBlocking 의 각각의 종류에 따라 Call 방식은 총 4가지의 경우가 존재할 수 있게되며,
가장 효율적인 방식은 Async-Non Blocking이라고 볼 수 있다.
* Async-Blocking의 경우, 일반적으로 사용하지 않고, 효율적이지도 않은 방식, 대개 Async-Non Blocking을 방식을 사용하다 Blocking 작업이 어쩌다 포함되어 자연스럽게 생기는 경우다.
3. 참고 문서
https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/
Blocking-NonBlocking-Synchronous-Asynchronous
꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면
homoefficio.github.io
http://www.programmr.com/blogs/difference-between-asynchronous-and-non-blocking