본문 바로가기

Computer Science

[CS] Sync/Async, Blocking/Non Blocking

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