네트워크
Blocking vs Non-blocking , Synchronous vs Asynchronous
ted k
2022. 8. 13. 17:04
Blocking
- 요청한 작업을 마칠 때까지 계속 대기한다.
- return 값을 받아야 끝난다.
- 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만드는 것
- e.g. 전화를 받을 때까지 계속 대기 후 답을 얻는다.
Non-blocking
- 요청한 작업을 즉시 마칠 수 없다면 바로 Return 한다.
- 결과가 완료 되었는지 지속적으로 확인한다.
- 호출된 함수가 바로 Return 해서 호출한 함수에게 제어권을 넘겨주고 호출한 함수가 다른 일을 할 수 있게 기회를 준다.
- e.g. 전화를 했는데 받지 않아 계속 반복 전화하다가 어느 순간 받아서 답을 얻는다.
Synchronous
- (현재 작업의 응답과 다음 작업의 요청이) 동시에 똑같이 진행된다.
- 작업 요청을 했을 때 요청의 결과값을 직접 받는 것이다.
- 호출한 함수가 작업 완료를 신경 쓴다.
- e.g. 송금을 하고 금액을 받는 상황은 동시에 이루어져야 한다.
Asynchronous
- (현재 작업의 응답과 다음 작업의 요청이) 동시에 진행되지 않는다.
- 작업 요청을 했을 때 요청의 결과값을 간접적으로 받는 것이다.
- 요청의 결과값과 return 값이 다를 수 있다.
- 호출된 함수 (callback 함수) 가 작업 완료를 신경쓴다.
- e.g. 각 학생들의 시험 제출과 선생님의 채점은 동기적이지 않아도 된다.
Synchronous + Blocking
- 순차적으로 진행되고, 블록킹 방식으로 다른 작업을 동시에 진행할 수 없다.
- 부모 프로세스는 자식 프로세스가 종료될 때까지 대기한 뒤 종료된다.
Synchronous + Non-blocking
- 부모프로세스가 자식프로세스를 실행시키고 자신의 일을 하면서 자식프로세스가 끝났는지 지속적으로 확인한다.
- 자식프로세스가 종료되면 자신도 종료된다.
Asynchronous + Non-blocking
- 부모프로세스는 자식프로세스에 task를 맡기고 신경쓰지 않고 자신의 task를 수행한다.
- 자식프로세스가 완료되면 콜백으로 알려주거나, 다른 프로세스에 task를 맡긴다.
Asynchronous + Blocking
- 하나의 프로세스를 블록킹시켜놓고 여러 개의 I/O를 다중화해서 받을 수 있게 한다.
<sys/select.h> select()
함수가 작동하는 원리이다.- 성능이 좋지 않고 일반적인 상황에선 잘 쓰이지 않는다.
필자 각주
- Sync / Asyc : 요청한 순서가 지켜지는가.
- blocking / non-blocking : 요청 받은 쪽에서 처리가 끝나기 전에 리턴을 해주는가 아닌가.