시냅스

Blocking vs Non-blocking , Synchronous vs Asynchronous 본문

네트워크

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 : 요청 받은 쪽에서 처리가 끝나기 전에 리턴을 해주는가 아닌가.

'네트워크' 카테고리의 다른 글

HTTP HyperText Transfer Protocol 정리  (0) 2022.08.08
TIL : 라우팅 프로토콜  (0) 2021.12.23
TIL : 라우팅  (0) 2021.12.19
TIL : 디폴트 게이트웨이  (0) 2021.12.19
TIL : 라우터  (0) 2021.12.18
Comments