Blocking/Non-blocking & Synchronous/Asynchronous

사진은 첫 Reference에서 정리된 사진 한장이면 충분하다.

다만 각각을 리뷰해 보겠다.

  • Blocking & Non-Blocking
    이 두개의 차이는 함수가 바로 return되냐 아니냐의 차이다. 호출한 함수가 호출된 함수에게 바로 return해서 제어권을 넘겨주고 다른 일을 할 수 있는 기회를 주면 Non-Blocking, 아니고 작업이 완료될때가지 제어권을 주지않고 대기하게 하면 Blocking이다

    Blocking의 경우 여러 Client가 접속하는 서버의 경우 다른 Client에 영향을 주면 안됨으로 Client별로 별도의 Thread를 만들어야하고 이에 많은 Thread로 인해 비효율적임.

  • Synchronous & Asynchronous 이 두개는 동시성과 관계있다. Synchronous한 경우라면 호출된 함수는 호출한 함수를 기다리면서 어떤지 계속 확인할 것이고, Asynchronous하다면 호출된 함수는 호출한 함수를 신경쓰지않고 호출한 함수 스스로 신경쓰다가 Callback으로 호출한다.

두번째 Reference의 치킨집 예시가 너무 좋으니 참고해볼것.

Reference

http://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/
https://gyoogle.dev/blog/computer-science/network/Blocking,Non-blocking%20&%20Synchronous,Asynchronous.html